티스토리 뷰

반응형

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

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색
  • 깊이 우선 탐색

 


 

⊙ 문제 접근 과정

 

bfs를 돌렸다. 2번.

 

한 번은 입력받은 RGB 그대로 돌려서 구역을 찾아냈다.

 

마지막 한번은 R을 전부 G로 바꾸고 visited 여부를 초기화해준 후 돌려줬다.

 


 

⊙ 문제 풀이

 

import sys
from collections import deque

input = sys.stdin.readline
N = int(input())
arr = [list(map(str, input().strip())) for _ in range(N)]
visited = [[0]*(N+1) for _ in range(N+1)]
dx = [0,0,-1,1]
dy = [1,-1,0,0]

q = deque()
ans = 0

def bfs(x,y):
    global ans
    q.appendleft([x,y])
    visited[x][y]=1
    while q:
        x,y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0<=nx<N and 0 <=ny<N and visited[nx][ny]==0:
                if arr[x][y]==arr[nx][ny]:
                    visited[nx][ny]=1
                    q.append([nx,ny])
        
    
for i in range(N):
    for j in range(N):
        if visited[i][j]==0:
            bfs(i,j)
            ans+=1
print(ans,end=' ')
for i in range(N):
    for j in range(N):
        if arr[i][j]=='R':
            arr[i][j]='G'
visited = [[0]*(N+1) for _ in range(N+1)]
ans = 0
for i in range(N):
    for j in range(N):
        if visited[i][j]==0:
            bfs(i,j)
            ans+=1
print(ans)

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함