PS/프로그래머스

[Python] 공원 산책

s_omi 2024. 11. 1. 10:47

✏️ 문제

 

문제 파악

원래 좌표 이동과 좀 다르게 아래로 갈수록 +1 되는 형식인데... 이런 형식만 나오면 왜이렇게 헷갈리는 지..  

그래서 방향을 처리하는 게 매우매우 중요하다. 그리고 원래 좌표 이동과 별개로 생각하고 계산하는 게 편하다..!

중요한 건 routes 중 하나를 처리하는 중에 공원을 벗어나거나 장애물을 만나면 무조건 해당 명령을 받아들이기 전 위치에서 다음 명령을 수행해야한다!

 

처음에 난 continue를 사용했는데 결과를 보니 예시 3번과 같은 경우 E 2를 처리할 때 장애물을 벗어나므로 E 2라는 명령을 처리하기 전 위치로 가야하는데 E 1까지는 장애물을 벗어나지 않으니까 E 1까지 처리한 후에 다음 명령을 수행해서 계속 틀렸었따 ㅠ 

 

이럴 땐 continue가 아닌 break를 사용해야 했었음 ......

 

 

코드

def solution(park, routes):
    h, w = len(park), len(park[0])
    dn = ['N', 'S', 'W', 'E']
    d = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    graph = [[0] * w for _ in range(h)]
    cur_x, cur_y = 0, 0
    
    for i, par in enumerate(park):
        for j, p in enumerate(par): 
            if p == 'X': 
                graph[i][j] = 1
            if p == 'S':
                cur_x, cur_y = i, j

    for r in routes:
        t_x, t_y = cur_x, cur_y 
        for _ in range(int(r[2])):
            dx, dy = cur_x + d[dn.index(r[0])][0], cur_y + d[dn.index(r[0])][1]

            if 0 <= dx < h and 0 <= dy < w and graph[dx][dy] != 1:
                cur_x, cur_y = dx, dy
            else:
                cur_x, cur_y = t_x, t_y
                break 

    return [cur_x, cur_y]

 

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 개인정보 수집 유효기간  (1) 2024.11.02
[Python] 10번 / 공원  (0) 2024.11.02
[Python] 10번 / 데이터 분석  (0) 2024.11.01
[Python] 1번 / 붕대 감기  (0) 2024.11.01
[Python] 햄버거 만들기  (0) 2024.10.31