BOJ 10026 : 적록색약

통상적으로 생각 할 수 있는 구현에서 조건이 약간 달라지는 문제이다. 만들다보면 겹치는 영역이 많은 상황으로 빠지게 될 수 도 있는데, 절대 코드를 줄여보겠다고 시도하지말라.

소프트웨어 개발 모델이라는 이론적인 영역뿐만 아니라 기본적인 프로그램 개발에 있어서도 일단 작동 되는걸 만들고 시간내지 코드 줄이기를 해야겠다는 되새김을 다시 하는 문제였다. 물론 안해도 되면 안 할 것이다.

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

 

 

import sys
from collections import deque
input = sys.stdin.readline

dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

areaSize = int(input())

area = []

duo_q = deque()
tri_q = deque()

duo_cnt = 0
tri_cnt = 0

duo_isVisited = [[False for _ in range(areaSize)] for _ in range(areaSize)]
tri_isVisited = [[False for _ in range(areaSize)] for _ in range(areaSize)]

for i in range(areaSize):
    area.append(list((input().strip())))


for i in range(areaSize):
    for j in range(areaSize):
        if(tri_isVisited[i][j] == False):
            tri_cnt += 1
            tri_q.append([i, j, area[i][j]])

            while(tri_q):
                x, y, color = tri_q.popleft()
                for k in range(4):
                    nx = x + dx[k]
                    ny = y + dy[k]

                    if(0 > nx or nx >= areaSize or 0 > ny or ny >= areaSize):
                        continue

                    if(tri_isVisited[nx][ny] == True):
                        continue

                    if(area[nx][ny] != color):
                        continue

                    tri_isVisited[nx][ny] = True
                    tri_q.append([nx, ny, area[nx][ny]])


        if(duo_isVisited[i][j] == False):
            duo_cnt += 1
            duo_q.append([i, j, area[i][j]])
            
            while(duo_q):
                x, y, color = duo_q.popleft()
                for k in range(4):
                    nx = x + dx[k]
                    ny = y + dy[k]

                    if(0 > nx or nx >= areaSize or 0 > ny or ny >= areaSize):
                        continue

                    if(duo_isVisited[nx][ny] == True):
                        continue

                    if(color == 'R' or color == 'G'):
                        if(area[nx][ny] == 'B'):
                            continue
                    else:
                        if(area[nx][ny] != 'B'):
                            continue

                    duo_isVisited[nx][ny] = True
                    duo_q.append([nx, ny, area[nx][ny]])
                        
print(f"{tri_cnt} {duo_cnt}")

'문제풀이' 카테고리의 다른 글

BOJ 11726 : 2xn 타일링  (0) 2025.05.17
BOJ 1475 : 방 번호  (0) 2025.05.15
BOJ 1012 : 유기농 배추  (0) 2025.05.13
BOJ 14891 : 톱니바퀴  (0) 2025.05.12
malloc LAB #3 : Explicit Free List  (0) 2025.04.28