문제풀이/그래프

[파이썬] [그래프] Pro 방의 개수

승무_ 2022. 2. 20. 14:58

문제

https://programmers.co.kr/learn/courses/30/lessons/49190?language=python3 

 

코딩테스트 연습 - 방의 개수

[6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0] 3

programmers.co.kr

 

코드

from collections import defaultdict
def solution(arrows):
    dx=[-1,-1,0,1,1,1,0,-1]
    dy=[0,1,1,1,0,-1,-1,-1]

    array=defaultdict(list)

    answer=0
    row,col=0,0
    for i in arrows:
        for _ in range(2):
            nx=row+dx[i]
            ny=col+dy[i]
            if (nx, ny) in array and (row, col) not in array[(nx, ny)]:  # 방문했던 점이지만 경로가 겹치지 않는 경우, 방+1
                answer += 1
                array[(row, col)].append((nx, ny))
                array[(nx, ny)].append((row, col))
            elif (nx, ny) not in array:  # 방문하지 않았던 경우
                array[(row, col)].append((nx, ny))  # 경로가 겹치는 경우는 따로 해줄 필요 없음
                array[(nx, ny)].append((row, col))
            row=nx
            col=ny
    return answer

생각 정리

[5, 2, 7, 1, 6, 3]인 경우와 경로가 겹치는 경우를 고려해야 한다.