https://school.programmers.co.kr/learn/courses/30/lessons/172928
풀이 - 나의 생각
출발 위치를 찾고
이동을 하면 됩니다.
다만 범위를 벗어나거나, 중간에 장애물이 있으면
이동을 안합니다.
그러니까 쭉 본 후에
문제 없으면 이동해야 합니다.
이걸 풀면서 새로 배운게 있어서 기록합니다.
for문 else 사용
for _ in range(steps):
nx += dx
ny += dy
# 범위 체크 및 장애물 확인
if not (0 <= nx < len(park) and 0 <= ny < len(park[0]) and park[nx][ny] != 'X'):
break
else:
# 유효한 이동인 경우에만 최종 위치 갱신
x, y = nx, ny
for문이 문제 없이 진행 되면
else문이 실행되고
중간에 if문에 걸려서 break 되면
else문은 실행되지 않습니다.
재밌어....
코드
def solution(park, routes):
direction = {'N': (-1, 0), 'S': (1, 0), 'E': (0, 1), 'W': (0, -1)}
for i, row in enumerate(park):
if 'S' in row:
x, y = i, row.index('S')
break
for route in routes:
dir_char, steps = route[0], int(route[2])
dx, dy = direction[dir_char]
nx, ny = x, y
for _ in range(steps):
nx += dx
ny += dy
if not (0 <= nx < len(park) and 0 <= ny < len(park[0]) and park[nx][ny] != 'X'):
break
else:
x, y = nx, ny
return [x, y]
def solution(park, routes):
direct = {'N':(-1,0), 'S':(1,0), 'E':(0,1), 'W':(0,-1)}
for i, row in enumerate(park):
if 'S' in row:
x, y = i, row.index('S')
break
for route in routes:
dir_char, steps = route[0], int(route[2])
dx, dy = x, y
for n in range(steps):
dx += direct[dir_char][0]
dy += direct[dir_char][1]
if not (0 <= dx < len(park) and 0 <= dy < len(park[0]) and park[dx][dy] != 'X'):
dx, dy = x, y
break
x, y = dx, dy
return [x, y]
728x90
'프로그래머스 > Lv.1' 카테고리의 다른 글
2020 카카오 인턴십 > 키패드 누르기, 구현, abs (0) | 2024.11.15 |
---|---|
기사단원의 무기 - Python, 약수 찾기 (0) | 2024.11.14 |
체육복 - Python, set (0) | 2024.11.12 |
숫자 짝궁 - Python, Counter, extend (0) | 2024.11.10 |
K번째 수 - Python, heap (1) | 2024.11.08 |