반응형
https://www.acmicpc.net/problem/10026
"""
적록색약 (Gold 5)
https://www.acmicpc.net/problem/10026
"""
from collections import deque
N = int(input()) # N 입력받음. ( N * N )
board = [input() for _ in range(N)] # 적록색약 아닌 사람의 그래프
board_blind = [row.replace("R", "G") for row in board] # 적록색약인 사람의 그래프 (R을 G로 통일)
visit_o = [[False] * N for _ in range(N)] # 적록색약 아닌 사람의 방문 배열
visit_n = [[False] * N for _ in range(N)] # 적록색약인 사람의 방문 배열
dxy = [(-1, 0), (1, 0), (0, 1), (0, -1)] # 상하좌우
res = [0, 0] # 인덱스 0은 아닌 사람, 1은 색약인 사람.
def bfs_o(ox, oy, color, board, visit): # bfs 돌리기.
q = deque()
q.append((ox, oy))
visit[ox][oy] = True
while q:
x, y = q.popleft()
for dx, dy in dxy:
nx = x + dx
ny = y + dy
if (0 <= nx < N) and (0 <= ny < N) and (not visit[nx][ny]) and (board[nx][ny] == color):
visit[nx][ny] = True
q.append((nx, ny))
for i in range(N):
for j in range(N):
# 적록색약인 사람과 아닌 사람을 둘 다 돌림.
if not visit_o[i][j]:
res[0] += 1
bfs_o(i, j, board[i][j], board, visit_o)
if not visit_n[i][j]:
res[1] += 1
bfs_o(i, j, board_blind[i][j], board_blind, visit_n)
print(*res) # 영역 개수 출력
"""
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
"""
일단 전형적인 bfs 로 영역 개수 세는 문제. 근데 처음에는 bfs에 색약인 사람과 아닌 사람을 다 해버리려고 어떻게 비벼보다가 안 돼서.. chatGPT 한테 "백준 10026번 문제 파이썬으로 풀어줘" 했는데 진짜 풀어줬다 하하,,, 이게 맞나. 근데 사람들이 푸는 대로 dx, dy 로 풀진 않아서 대충 포인트만 가져왔는데 replace("R", "G") 로 색약에 따라 그래프를 나누고, i, j 반복문을 돌면서 색약유무로 둘 다 돌려주었다.
마지막으로 res 리스트의 인덱스 0을 색약무, 1을 색약유로 두어 카운팅해서 출력해주었더니 성공!
챗지피티 모르는게 뭐야..
반응형
'알고리즘 🤔' 카테고리의 다른 글
[백준 자바 9466] 텀 프로젝트 (골드 3) (1) | 2023.02.15 |
---|---|
[백준 파이썬 2573] 빙산 (골드 4) (0) | 2023.02.01 |
[백준 파이썬 9466] 텀 프로젝트 (골드 3) (2) | 2023.02.01 |
[백준 파이썬 2796] 캠핑 (브론즈 1) (0) | 2023.01.14 |
[백준 파이썬 2841] 외계인의 기타 연주 (실버 1) (1) | 2023.01.14 |