ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] BOJ 10026: 적록색약
    코딩테스트/백준 2024. 11. 19. 20:39

    요구사항

    • 시간제한 1초
    • 메모리 제한 128MB
    • 적록색약이 아닌 사람과 그런 사람이 볼 수 있는 구역의 수를 구하라. 

    설계

    • 적록색약이냐 아니냐를 플래그로 만들어서 bfs 함수에 넣어준다. 
    • 추가로 방문 여부와 count 값도 따로 만들어준다. 

    구현

    from collections import deque
    
    # 방향 벡터 (상, 하, 좌, 우)
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    def bfs(x, y, grid, visited, n, color_blind):
        queue = deque([(x, y)])
        visited[x][y] = True
        current_color = grid[x][y]
        
        while queue:
            cx, cy = queue.popleft()
            for i in range(4):
                nx, ny = cx + dx[i], cy + dy[i]
                if 0 <= nx < n and 0 <= ny < n and not visited[nx][ny]:
                    if color_blind:
                        # 적록색약인 경우
                        if current_color in "RG" and grid[nx][ny] in "RG":
                            visited[nx][ny] = True
                            queue.append((nx, ny))
                        elif grid[nx][ny] == current_color:
                            visited[nx][ny] = True
                            queue.append((nx, ny))
                    else:
                        # 일반인
                        if grid[nx][ny] == current_color:
                            visited[nx][ny] = True
                            queue.append((nx, ny))
    
    # 입력
    n = int(input())
    grid = [input().strip() for _ in range(n)]
    
    # 일반인 경우
    visited_normal = [[False] * n for _ in range(n)]
    normal_count = 0
    
    # 적록색약 경우
    visited_blind = [[False] * n for _ in range(n)]
    blind_count = 0
    
    # 탐색
    for i in range(n):
        for j in range(n):
            if not visited_normal[i][j]:
                bfs(i, j, grid, visited_normal, n, False)
                normal_count += 1
            if not visited_blind[i][j]:
                bfs(i, j, grid, visited_blind, n, True)
                blind_count += 1
    
    # 결과 출력
    print(normal_count, blind_count)

    '코딩테스트 > 백준' 카테고리의 다른 글

    [Python] BOJ 7562: 나이트의 이동  (1) 2024.11.27
    [Python] BOJ 9935: 문자열 폭발  (1) 2024.11.20
    [Python] BOJ 2178 미로탐색  (0) 2024.11.01
    [Python] BOJ 1926 : 그림  (0) 2024.10.29
    [Python] BOJ 2504 괄호의 값  (0) 2024.10.28
Designed by Tistory.