반응형
공원 산책과 같은 문제는 종종 코테에 나오는 것 같아서 리뷰를 할 예정이다.
구구절절 문제가 길어보지만, 조건문을 달아서 쉽게 풀이할 수 있다.
먼저, S, O, X로 된 입력 문장을 풀이하기 쉽게 숫자로 변환하는 과정이 필요하다. X는 1로 설정하고, S, O는 0으로 설정하면 아래와 같이 코딩할 수 있다.
def solution(park, routes):
nrow, ncol = len(park)-1, len(park[0])-1
coord = []
for i in range(nrow+1):
rows = []
for j in range(ncol+1):
idx = park[i][j]
if idx == 'S':
row, col = i, j
rows.append(0)
elif idx == 'X':
rows.append(1)
else:
rows.append(0)
coord.append(rows)
그 다음으로, 동, 서, 남, 북으로 움직이는 값에 0, -1, 1 등의 값을 부여한다. 예를 들어, 동쪽으로 움직이는 경우 col 좌표가 1로 이동하고, 남쪽으로 움직이는 경우 row 좌표가 1 만큼 이동하는 것을 의미한다.
move_row = {'E':0, 'W':0, 'N':-1, 'S':1}
move_col = {'E':1, 'W':-1, 'N':0, 'S':0}
그런 다음 route를 입력으로 받아서, 각 좌표에 대한 이동을 하나씩 시행한다. 처음에는 공원을 벗어나는 경우에 대해서 먼저 처리를 해주는 과정이 필요하다. 그 다음으로는 각 좌표가 한 칸(step)씩 움직일 때 장애물이 존재하는 지 여부를 판단하고, 장애물이 존재하면 error += 1로 지정하여 마지막에 error가 0이면 시작지점을 이동한 지점으로 변환하는 형태로 진행할 수 있다.
def solution(park, routes):
nrow, ncol = len(park)-1, len(park[0])-1
coord = []
for i in range(nrow+1):
rows = []
for j in range(ncol+1):
idx = park[i][j]
if idx == 'S':
row, col = i, j
rows.append(0)
elif idx == 'X':
rows.append(1)
else:
rows.append(0)
coord.append(rows)
move_row = {'E':0, 'W':0, 'N':-1, 'S':1}
move_col = {'E':1, 'W':-1, 'N':0, 'S':0}
for route in routes:
error = 0
d, step = route.split()
step = int(step)
new_row = row + move_row[d] * step
new_col = col + move_col[d] * step
if (new_row < 0) or (new_row > nrow):
continue
elif (new_col < 0) or (new_col > ncol):
continue
elif row != new_row:
for r in range(1, step+1):
r_step = row + move_row[d]*r
if coord[r_step][col]:
error += 1
elif col != new_col:
for c in range(1, step+1):
c_step = col + move_col[d]*c
if coord[row][c_step]:
error += 1
if error == 0:
row = new_row
col = new_col
elif error > 0:
row = row
col = col
return [row, col]
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 키패드 누르기 - Python (0) | 2023.08.24 |
---|---|
[프로그래머스] 성격 유형 검사 - Python (2) | 2023.08.24 |
[프로그래머스] 달리기 경주 - Python (0) | 2023.08.24 |
[Algorithm] sort()와 sorted()의 차이점 (2) | 2022.08.18 |
[Algorithm] List, Dictionary의 시간 복잡도 (0) | 2022.08.18 |