https://programmers.co.kr/learn/courses/30/lessons/49994
코딩테스트 연습 - 방문 길이
programmers.co.kr
def solution(dirs):
visited = set()
direction = {'R': [0, 1], 'U': [1, 0], 'L': [0, -1], 'D': [-1, 0]}
x, y = 0, 0
answer = 0
for order in dirs:
dx, dy = direction[order]
if -5 <= x+dx <= 5 and -5 <= y+dy <= 5:
road1 = ''.join(list(map(str, [x, y, x+dx, y+dy])))
road2 = ''.join(list(map(str, [x+dx, y+dy, x, y])))
if road1 not in visited:
answer += 1
visited.add(road1)
visited.add(road2)
x += dx
y += dy
return answer
풀이
1. 방문 여부를 집합으로 관리해주었다.
2. direction은 각 방향마다 좌표 이동을 딕셔너리로 정의
3. 각 명령마다
- -5~5의 범위 안의 모든 값마다
- x, y, x+dx, y+dy를 합한 문자열을 visited에 없으면 answer += 1
- 이후 해당 문자열을 visited에 add (x+dx, y+dy, x, y도 포함, 선분이므로 두 가지 경우)
- x, y 값 이동
4. answer 반환
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2 - 올바른 괄호 (파이썬) (0) | 2022.05.14 |
---|---|
[프로그래머스] Lv2 - 가장 큰 정사각형 찾기 (파이썬) (0) | 2022.05.14 |
[프로그래머스] Lv2 - 스킬트리 (파이썬) (0) | 2022.05.13 |
[프로그래머스] Lv2 - 쿼드압축 후 개수 세기 (파이썬) (0) | 2022.05.13 |
[프로그래머스] Lv2 - n^2 배열 자르기 (파이썬) (0) | 2022.05.13 |