https://school.programmers.co.kr/learn/courses/30/lessons/172928
구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
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]
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Implementation' 카테고리의 다른 글
(Python3) - 프로그래머스(PCCP 기출문제): 1번 / 분대 감기 (1) | 2024.11.11 |
---|---|
(Python3) - 프로그래머스(연습문제): 대충 만든 자판 (0) | 2024.11.10 |
(Python3) - 프로그래머스(연습문제): 달리기 경주 (0) | 2024.11.10 |
(Python3) - 프로그래머스(PCCE 기출문제): 9번 이웃한 칸 (0) | 2024.11.10 |
(Python3) - 프로그래머스(PCCE 기출문제): 9번 / 지폐 (0) | 2024.11.08 |