본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(연습문제): 공원 산책

반응형

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 정답 배열 answer 선언 후 빈 배열로 초기화합니다.

 

2. 높이 h, 너비 w선언 후 적절히 초기화합니다.

 

3. 시작좌표 start_h, start_w를 선언 후 적절히 초기화합니다.

 

4. hash map변수 dh, dw를 선언 후 방향에 따른 좌표값을 key, value로 저장합니다.

📔 풀이과정

routes에 대해 for loop를 수행하면서 다음을 진행합니다.1. 지역변수 route를 선언해 공백으로 구분한 split된 배열을 저장합니다.

 

2. 방향, 이동횟수 direction과 move를 선언해 각각 0번째 값과 1번째 값을 정수로 casting한 값을 저장해줍니다.

 

3. 유효한 이동인지 확인하기 위해 is_valid를 선언 후 True값으로 저장합니다.

 

4. 현재 좌표 ch, cw선언 후 start_h, start_w값을 저장합니다.

 

5. move만큼 for loop를 수행하며   5-1. 현 방향으로 이동한 nh, nw값을 구합니다.  5-2. 범위 밖이거나 장애물이 있다면 is_valid를 False로 갱신합니다.  5-3. ch, cw를 nh, nw값으로 갱신합니다.

 

6. 유효한 이동이라면 start_h, start_w값을 이동한 결과인 ch, cw로 갱신해줍니다.

📔 정답 출력 | 반환

[start_h, start_w]를 반환합니다.


📕 Code

📔 Python3

def solution(park, routes):
    answer = []
    h, w = len(park), len(park[0])
    start_h, start_w = 0,0
    for i in range(0, h):
        for j in range(0, w):
            if park[i][j] == 'S':
                start_h, start_w = i, j
    
    dh = {'E': 0, 'W': 0, 'S': 1, 'N': -1}
    dw = {'E': 1, 'W': -1, 'S': 0, 'N': 0}
    
    for r in routes:
        route = r.split(' ')
        direction, move = route[0], int(route[1])
        is_valid = True
        ch, cw = start_h, start_w
        for i in range(0, move):
            nh = ch + dh[direction]
            nw = cw + dw[direction]
            if 0 > nh or nh >= h or 0 > nw or nw >= w or park[nh][nw] == 'X':
                is_valid = False
                break
            ch, cw = nh, nw
        if is_valid:
            start_h, start_w = ch, cw
    return [start_h, start_w]

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.