본문 바로가기

C언어

2025년 1학기 8주차 C언어

def solution(arrows):
    # 8방향의 백터를 각각 나타낸다. 처음부터 0~7의 순서다.
    vx = [0, 1, 1, 1, 0, -1, -1, -1]
    vy = [1, 1, 0, -1, -1, -1, 0, 1]

    visited = set()        # 방문한 좌표를 저장한다. 집합을 사용하여 관리한다.
    edges = set()          # 지나간 경로 저장 (중복 방문 방지)
    x, y = 0, 0          
    visited.add((x, y))    # 시작점 방문 처리

    answer = 0              # 생긴 방 개수

    for d in arrows:
        for _ in range(2):  # 대각선 교차 처리를 위해 0.5칸 단위로 2번 나눠 이동한다
            nx = x + vx[d]
            ny = y + vy[d]

            edge = ((x, y), (nx, ny))         # 현재 위치에서 다음 위치로 간다
            rev_edge = ((nx, ny), (x, y))     # 거꾸로도 저장한다

            # 방이 발생한 경우를 나타낸다
            if (nx, ny) in visited and edge not in edges:
                answer += 1

            visited.add((nx, ny))     # 새 위치 방문 처리
            edges.add(edge)           # 경로 저장
            edges.add(rev_edge)       # 반대 방향도 저장해서 중복 체크 방지

            x, y = nx, ny             # 현재 위치 갱신

    return answer

'C언어' 카테고리의 다른 글

2025년 여름학기 2주차 C언어  (0) 2025.07.06
2025년 여름학기 1주차 C언어  (0) 2025.06.29
2025년 1학기 7주차 C언어  (0) 2025.05.17
2025학년 1학기 6주차 C언어  (0) 2025.05.10
2025년 C언어 5주차 추가  (0) 2025.05.01