728x90
반응형
4-1문제
k=int(input()) arr=[['0' for i in range (k) ]for row in range (k)] strarr= list(map(str,input().split())) #문자열 끊어서 저장 x=0 y=0 #시작 좌표 for i in strarr: if i=='L': if(y==0): continue else: y-=1 elif i=='R': if(y==k-1): continue else: y+=1 elif i=='U': if(x==0): continue else: x-=1 else: if(x==k-1): continue else: x+=1 print(x+1, y+1)
4-2 시각 문제
n=int(input()) count=0 ##n=2라면, for i in range(n+1): for j in range (60): for k in range(60): if '3' in str(i)+str(j)+str(k): ##nn시 jj분 kk초 꼴에서 3이 나온다면 count++함 count+=1 print(count) ##00시 00분 00초에서 1시간당 3/13/23/30~39/43/53 -> 초:
4-3 왕실의 나이트
n, m=input().strip()##strip()은 한 글자씩 끊어서 저장받음 m=int(m) #아아부터 고고| cnt=0 if(m+2 <= 8): if(chr(ord(n)+1)<='h'): cnt+=1 if(chr(ord(n)-1)>='a'): cnt+=1 if(m-2>=1): if(chr(ord(n)+1)<='h'): cnt+=1 if(chr(ord(n)-1)>='a'): cnt+=1 if(chr(ord(n)+2) <='h'): if(m+1<=8): cnt+=1 if(m-1>=1): cnt+=1 if(chr(ord(n)-2) >= 'a'): if(m+1<=8): cnt+=1 if(m-1>=1): cnt+=1 print(cnt)
20분 제한 문제지만 25분이 걸렸다
풀면서 4-1 상하좌우 문제와 비슷하게 풀리지 않을까? 생각했는데 일단 무작정
상상 하하 좌좌 우우씩 이동 후 다음단계 이동이 가능한지 확인하는 방식으로 풀었다.
답지의 풀이에서는 역시 steps =[ (-2,-1) , (-1,-2) .... (2,1),(1,2))] 의 8가지 이동 방향 리스트가 있었다.
**문자열에서 알파벳을 다음 알파벳혹은 이전 알파벳으로 변환하는 방법
chr(ord('a')+1) 꼴로 사용하면 b가 나온다.
chr(ord('b')-1) 꼴을 사용하면 a가 나온다.
n, m=input().strip() m=int(m) #m은 숫자로 행 n=int(ord(n)-ord('a'))+1 ##n은 알파벳으로 열, 1으로 만들어준다. steps=[(-2,-1),(-2,1),(2,-1),(2,1),(1,2),(1,-2),(-1,2),(-1,-2)] cnt=0 for step in steps: row=m+step[0] col=n+step[1] if(row<=8 and row>=1 and col<=8 and col>=1):cnt+=1 print(cnt)
풀이를 참고해 다시 풀어본 모습!!
상하좌우 형태의 문제에서는, dx와 dy변수가 중요하게 쓰이는 것같아서 연습해보려고 다시 풀어봤다.
4-4 게임 개발
n, m=map(int,input().split()) a, b, d=map(int, input().split()) visit=[[0 for j in range(n)]for i in range(m)] visit[a][b]=1 array=[] for i in range(n): array.append(list(map(int, input().split()))) #북동남서 이동 dx=[-1,0,1,0] dy=[0,1,0,-1] def turn_left(): global d d-=1 if(d==-1): d=3 cnt=1 t_cnt=0 while True: turn_left() nx=a+dx[d] ny=b+dy[d] if(visit[nx][ny]==0 and array[nx][ny]==0): visit[nx][ny]=1 ##방문체크하고 a=nx b=ny #좌표 바꿔준다 cnt+=1 #카운트늘려준다 turn_left() t_cnt=0 continue else: t_cnt+=1 if(t_cnt==4): nx=a-dx[d] ny=b-dy[d] if array[nx][ny]==0: a=nx b=ny else: break t_cnt=0 print(cnt)
어려워서 조금 고민하고 바로 답을 봤는데, 내일 다시 풀어 볼 것!!
728x90
반응형
'공부 > <이것이 코딩테스트다>' 카테고리의 다른 글
부록 A 코딩 테스트를 위한 파이썬 문법 (2) | 2022.12.25 |
---|---|
(1) 그리디 알고리즘, 탐욕적인 알고리즘 (0) | 2022.12.22 |