문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/49994





제한 사항

입출력 예

풀이
def solution(dirs):
dir_set = set()
cur_pos = (0, 0)
next_pos = (-6, -6)
for dir in dirs:
x, y = cur_pos
if dir == 'U':
next_pos = (x, y + 1)
elif dir == 'D':
next_pos = (x, y - 1)
elif dir == 'L':
next_pos = (x - 1, y)
elif dir == 'R':
next_pos = (x + 1, y)
if is_in_boundary(next_pos):
dir_set.add(tuple(sorted((cur_pos, next_pos))))
cur_pos = next_pos
return len(dir_set)
def is_in_boundary(next_pos):
x, y = next_pos
return -5 <= x <= 5 and -5 <= y <= 5
후기
문제의 핵심은 지나온 길의 중복 처리와 경계를 넘어가는 방향의 처리이다. 전자는 정방향과 역방향의 길이를 중복되지 않게 처리하고 후자는 그냥 다음 위치가 경계를 넘어가는지만 확인하면 된다.
풀이는 if문을 사용하였지만 Python 3.10부터 match case를 사용할 수 있다고 한다. 그렇게 풀어도 되고, 처음부터 딕셔너리에 U, D, L, R을 Key로, 방향을 (0, 1) 이런 식으로 저장해서 사용하면 불필요한 조건 확인을 스킵할 수 있다.
아직 스타일이 자바에 너무 맞춰져 있는 탓인지 파이썬스러운(?) 코드 작성은 아직 서툰 것 같다... 더 공부해야겠다.
예전이 자바로도 한번 풀었었다.
https://megamaker.tistory.com/179
[프로그래머스][JAVA][Lv. 2] 방문 길이
문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/49994 제한 사항 입출력 예 풀이 import java.util.HashSet; class Solution { HashSet closedSet = new HashSet(); StringBuilder curPosBuilder = new StringBuilder().append("0505");
megamaker.tistory.com
'코딩테스트 (프로그래머스) > Python' 카테고리의 다른 글
| [프로그래머스][Python][Lv. 1] 3진법 뒤집기 (0) | 2026.05.23 |
|---|---|
| [프로그래머스][Python][Lv. 2] 올바른 괄호 (0) | 2026.05.10 |
| [프로그래머스][Python][Lv. 1] 실패율 (0) | 2026.04.11 |
| [프로그래머스][Python][Lv. 2] 미로 탈출 (0) | 2026.02.18 |
| [프로그래머스][Python][Lv. 1] [PCCE 기출문제] 10번 / 공원 (0) | 2025.11.24 |