[이코테] 상하좌우 - 구현(시뮬레이션)

jckim22·2023년 7월 3일
0

[ALGORITHM] STUDY (PS)

목록 보기
9/86

1. 문제 설명


2. 문제 검토

상화좌우 좌표를 구현하고 그에 따른 이동과 예외처리 등 알고리즘은 쉽지만 비교적 구현이 까다로우므로 구현 유형의 문제라고 할 수 있다.
또한 일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 '시뮬레이션 유형' 으로도 분류 가능하다.

3. 풀이

N = int(input())
V = list(input().split())

# 동 북 서 남
dx = [0, -1, 0, 1] #세로축 행
dy = [1, 0, -1, 0] #가로축 열

start = [1,1]

for x in range(len(V)):

    if V[x] == 'R':
        start[1] += dy[0]
        if start[1] > N:
            start[1] -= 1
    elif V[x] == 'L':
        start[1] += dy[2]
        if start[1] < 1:
            start[1] += 1
    elif V[x] == 'U':
        start[0] += dx[1]
        if start[0] < 1:
            start[0] += 1
            
    elif V[x] == 'D':
        start[0] += dx[3]
        if start[0] > N:
            start[0] -=1

        
    
print(start)


    

방향 벡터를 리스트로 정의하였다.
알파벳에 따라 그에 맞게 좌표를 이동하였고 주어진 좌표를 넘어서면 원상태로 돌려주었다.

N = int(input())
V = list(input().split())

# 동 북 서 남
dx = [0, -1, 0, 1] #세로축 행
dy = [1, 0, -1, 0] #가로축 열

move_type = ['R','U','L','D']

x,y=1,1

for i in V:
    
    for j in range(len(move_type)):
        if i == move_type[j]:
            nx=x+dx[j]
            ny=y+dy[j]
    
    if nx<1 or ny<1 or nx>N or ny>N:
        continue
    
    x=nx
    y=ny
    
print(f'{x} {y}')

풀이에서 힌트를 얻어 훨씬 간결하고 깔끔한 코드를 작성했다.

포인트는 nx, ny 와 같이 먼저 시뮬레이션을 하고 예외 시 예외처리를 해준다.
또한 방향 벡터와 move_type의 순서를 맞춰 보다 간결하게 코딩할 수 있었다.

4. 걸린 시간

14분 45초

5. 총평

구현 문제(시뮬레이션)에 대한 정확한 정의를 갖지 못했는데 이 문제를 통하여 정확하게 알게 되었다.

방향 벡터의 사용을 배웠다.

profile
개발/보안

0개의 댓글