Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 DP 문제풀이
- 노마드코더 리액트 노트정리
- 코테 공부
- 노마드코더 리액트
- 프로그래머스 방금그곡
- 프로그래머스 우박수열
- PostgreSQL
- 프로그래머스 134239 파이썬
- 프로그래머스 17683 파이썬
- 리액트 공부정리
- 코딩테스트공부
- 방금그곡 파이썬
- 프로그래머스
- 프로그래머스파이썬
- 백준문제풀이
- 카카오코테
- 노마드코더
- 뉴스 클러스터링 파이썬
- 프로그래머스 카카오코테
- 17677 파이썬
- 2022카카오코테
- 노마드코더리액트
- 우박수열 정적분 파이썬
- 코테공부
- 우박수열 파이썬
- 백준 타일링 문제
- 리액트 훅
- 리액트공부
- 리액트 독학
- 프로그래머스 17677
Archives
- Today
- Total
My Develop Log
[백준] (BFS/DFS) - 10026 적록색약 본문
문제
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다.
크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다)
예를 들어, 그림이 아래와 같은 경우에
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
적록색약이 아닌 사람이 봤을 때 구역의 수는 총 4개이다. (빨강 2, 파랑 1, 초록 1) 하지만, 적록색약인 사람은 구역을 3개 볼 수 있다. (빨강-초록 2, 파랑 1)
그림이 입력으로 주어졌을 때, 적록색약인 사람이 봤을 때와 아닌 사람이 봤을 때 구역의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 100)
둘째 줄부터 N개 줄에는 그림이 주어진다.
출력
적록색약이 아닌 사람이 봤을 때의 구역의 개수와 적록색약인 사람이 봤을 때의 구역의 수를 공백으로 구분해 출력한다.
예제 입력 1
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
예제 출력 1
4 3
문제풀이
import sys
from collections import deque
input = sys.stdin.readline
n = int(input().rstrip())
matrix = [list(input()) for _ in range(n)]
visited=[[False]*n for _ in range(n)]
# 상하좌우 움직임 처리
dx=[1,-1,0,0]
dy=[0,0,1,-1]
def bfs(x,y,color):
q= deque()
q.append((x,y))
while q:
x,y=q.popleft()
if visited[x][y]==False:
# 특정 색깔 영역만 True 처리
visited[x][y]=True
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<n and 0<=ny<n:
# 특정 색깔일 경우 q에 추가
if matrix[nx][ny]==color:
q.append((nx,ny))
#색약이 아닐경우 처리
cnt=0
# 방문처리가 되지 않은 곳의 color로 bfs 진행
for i in range(n):
for j in range(n):
if visited[i][j]==False:
color=matrix[i][j]
bfs(i,j,color)
cnt+=1
# 색약일 경우 처리
visited = [[False] * n for _ in range(n)]
colorWeakness_cnt=0
# 빨강과 초록의 구분이 없기 때문에 R을 G로 바꿔주기
for i in range(n):
for j in range(n):
if matrix[i][j] == 'R':
matrix[i][j] = 'G'
# 방문처리가 되지 않은 곳의 color로 bfs 진행
for i in range(n):
for j in range(n):
if visited[i][j]==False:
color=matrix[i][j]
bfs(i,j,color)
colorWeakness_cnt+=1
print(cnt,colorWeakness_cnt)
Reference
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
'코테 공부 > 백준' 카테고리의 다른 글
[백준] 2470 두 용액 (0) | 2023.04.20 |
---|---|
[백준] 1012 유기농 배추 (0) | 2023.04.19 |
[백준] (이진탐색) - 6236 용돈 관리 (0) | 2023.03.22 |
[백준] (이분탐색) - 1072 게임 (0) | 2023.03.13 |
[백준] (그리디) - 1541 잃어버린 괄호 (0) | 2023.03.03 |