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
반응형

+ Recent posts