728x90
반응형
구현이란?
머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.
문제
여행가 A는 N x N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1 x 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1,1)이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1,1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다.
L : 왼쪽으로 한칸, R: 오른쪽으로, U: 위로, D 아래로
첫째줄에는 N을 입력받고 둘째줄에는 방향을 입력받는다.
입력 예시
5
R R R U D D
출력
3 4
내 풀이
n = int(input())
dir = list(map(str,input().split()))
x=1
y=1
for i in dir:
if i=='R' and y!=n:
y+=1
elif i=='L' and y!=1:
y-=1
elif i=='U' and x!=1:
x-=1
elif i=='D' and x!=n:
x+=1
print(x,y)
나는 단순하게 입력받은 방향에 따라 사각형 끝의 조건을 추가하여 구현했다.
책 풀이
n=int(input())
x,y=1,1
plans=input().split()
# L,R,U,D에 따른 이동 방향
dx=[0,0,-1,1]
dy=[-1,1,0,0]
move_type=['L','R','U','D']
# 이동 계획을 하나씩 확인
for plan in plans:
# 이동 후 좌표 구하기
for i in range(len(move_type)):
if plan == move_type[i]:
nx = x+dx[i]
ny = y+dy[i]
# 공간을 벗어나는 경우 무시
if nx<1 or ny<1 or nx>n or ny>n:
continue
# 이동 수행
x,y=nx,ny
print(x,y)
이게 정석적인 풀이이다. 다른 문제를 접했을 때 이게 무슨 소리인가 했는데 이러한 풀이 방식을 많이 쓰더라. 이 정도는 이해하며 암기해두자.
728x90
반응형