반응형
https://www.acmicpc.net/problem/10026
적록색약 문제
RGB로 나누어진 영역의 개수와, 적록 색약이어서 RRB 혹은 GGB로만 볼 수 있을 때 나누어진 영역의 개수를 구하는 문제
BFS 개념을 이용해서 해결할 수 있었다.
📌 문제 접근 포인트
1. 나누어진 영역의 수를 구하기 위해서 BFS를 이용한 탐색을 진행해 주자, 진행 과정에서 방문 여부를 체크하기 위한 리스트를 하나 지정해 주자.
2. 처음 주어진 리스트를 이용해서 볼 수 있는 개수를 BFS를 이용해 체크해 주자.
3. 적록색약인 경우를 고려해서 G를 R로 바꾸거나 R을 G로 바꾸도록 리스트를 재구성해주고, 방문 여부도 다시 초기화해 주자.
4. 다시 똑같이 BFS를 이용해서 체크해 주고 결과를 출력하면 구현 성공
⚙ 내가 푼 정답 코드
def find(a,b): # 탐색
visited[a][b] = 1
queue = deque()
queue.append([a,b])
while queue:
y, x = queue.popleft()
for dy, dx in move :
ny, nx = y + dy, x + dx
if 0 <= ny < N and 0 <= nx < N and not visited[ny][nx]:
if color[ny][nx] == color[y][x]:
visited[ny][nx] = 1
queue.append([ny,nx])
def check(): # 볼 수 있는 개수 세기
cnt = 0
for i in range(N):
for j in range(N):
if not visited[i][j] :
find(i,j)
cnt += 1
return cnt
import sys
from collections import deque
move = [[0,1],[0,-1],[1,0],[-1,0]]
N = int(sys.stdin.readline())
color = [list(sys.stdin.readline().strip()) for _ in range(N)]
visited = [[0]*N for _ in range(N)]
result = check()
#적록색약
visited = [[0]*N for _ in range(N)] # 방문 체크 초기화
for i in range(N):
for j in range(N):
if color[i][j] == 'G':
color[i][j] = 'R'
rgresult = check()
print(result, rgresult)
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 1541] 잃어버린 괄호(python) (0) | 2023.05.07 |
---|---|
[백준 7677] Fibonacci (python) (0) | 2023.05.04 |
[백준 1461] 도서관(python) (0) | 2023.05.02 |
[백준 1067] 이동 (python) (0) | 2023.04.30 |
[백준 17114] 하이퍼 토마토 (python) (0) | 2023.04.30 |
댓글