티스토리 뷰

- 문제 링크

https://www.acmicpc.net/problem/10026

- 풀이

설명을 보면, 적록색약인 경우에는 빨강-초록을 하나로 본다. 그래서 적록색약이 아닌 경우를 첫번째로 탐색하며 현재 좌표의 색상과 상하좌우 좌표에 있는 색상이 같으면 bfs로 넣어준다. 최초 bfs 탐색이 끝나면 전체 graph를 돌면서 색이 G인 것을 R로 변경해주면 된다. 그 뒤에 visited 배열을 새로 만들고 두번째로 적록색약인 경우를 탐색하면 된다.

 

-  코드

import sys
from collections import deque
input = sys.stdin.readline
dx = [0,0,-1,1]
dy = [-1,1,0,0]
one, two = 0, 0
def bfs(x, y):
    visited[x][y] = 1
    queue = deque()
    queue.append((x, y))
    while queue:
        a, b = queue.popleft()
        for i in range(4):
            nx = a + dx[i]
            ny = b + dy[i]
            if 0 <= nx < N and 0 <= ny < N:
                if visited[nx][ny] == 0:
                    if graph[nx][ny] == graph[a][b]:
                        visited[nx][ny] = 1
                        queue.append((nx,ny))


N = int(input())
visited = [[0] * N for _ in range(N)]
graph = [list(map(str, input().rstrip())) for _ in range(N)]

for i in range(N):
    for j in range(N):
        if visited[i][j] == 0:
            bfs(i, j)
            one += 1

for i in range(N):
    for j in range(N):
        if graph[i][j] == 'G':
            graph[i][j] = 'R'

visited = [[0] * N for _ in range(N)]

for i in range(N):
    for j in range(N):
        if visited[i][j] == 0:
            bfs(i, j)
            two += 1

print(one, two)

알고리즘.. 매우 오랜만이다. 사실 요즘 번아웃 비슷하게 온 것도 있고 다른 일로도 넘 바빴다 보니 개발 공부를 거의 못했다.. 지금부터라도 다시 차근차근 시작해나가야겠다 ! 꾸준히 하자 !! 아자아자

 

리액트는 언제하지? ㅠㅠ

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함