문제 링크
풀이 - 다른 블로그 참고
방의 개수 세는 방법 : 현재 경로가 기존에 만들어진 적이 없으면서, 하나의 정점을 재방문 하는 경우
따라서 이동 방향에 따라 이동하면서,
재방문하는 정점이고 현재 경로가 기존에 만들어진적이 없으면 방의 개수 + 1
처음 방문하는 정점이면, 경로 추가
단, 두 칸씩 이동하면서 검사를 해야 예외 case를 해결할 수 있다.
- https://pf333.tistory.com/86 참고
from collections import defaultdict
def solution(arrows):
answer = 0
# 경로 추가할 list
visited = defaultdict(list)
# 번호에 따른 이동 방향
dx = [ -1, -1, 0, 1, 1, 1, 0, -1 ]
dy = [ 0, 1, 1, 1, 0, -1, -1, -1 ]
# 처음 위치
x,y = 0,0
for arrow in arrows :
# 예외 case 해결을 위해 2칸 씩 검사해줘야 함
for _ in range(2):
nx = x + dx[arrow]
ny = y + dy[arrow]
# 방문했던 정점이지만, 겹치는 경로가 아닌 경우
if (nx,ny) in visited and (x,y) not in visited[(nx,ny)]:
# 방의 개수 + 1
answer += 1
visited[(x,y)].append((nx,ny))
visited[(nx,ny)].append((x,y))
# 방문하지 않은 정점인 경우
elif (nx,ny) not in visited:
# 경로 추가
visited[(x,y)].append((nx,ny))
visited[(nx,ny)].append((x,y))
# 위치 갱신
x,y = nx,ny
return answer
'개발 > algorithm' 카테고리의 다른 글
[백준 1976번] 여행 가자 - python (0) | 2022.04.22 |
---|---|
[백준 1717번] 집합의 표현 - python / union-find 알고리즘 (0) | 2022.04.22 |
[프로그래머스][level4] 징검다리 - python (0) | 2022.04.21 |
[백준 1766번] 문제집 - python (0) | 2022.04.16 |
[백준 2252번] 줄 세우기 - python (0) | 2022.04.16 |