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 |
Tags
- Brightics를 이용한 분석
- 팀 분석
- 포스코 청년
- 삼성SDS
- 직원 이직률
- 삼성SDS Brigthics
- 브라이틱스
- 데이터분석
- 추천시스템
- 혼공
- Brightics Studio
- Brigthics
- 모델링
- 브라이틱스 서포터즈
- 캐글
- 영상제작기
- 삼성 SDS
- 개인 의료비 예측
- 삼성 SDS Brigthics
- 포스코 아카데미
- 직원 이직여부
- 혼공학습단
- Brigthics를 이용한 분석
- 노코드AI
- 혼공머신
- Brigthics Studio
- 혼공머신러닝딥러닝
- 데이터 분석
- Brightics
- 삼성SDS Brightics
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 10026번(그래프, BFS, DFS)_적록색약 본문
📌문제 유형
그래프 이론, 그래프 탐색, DFS, BFS (골드5)
📌문제
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
📌나의 문제풀이
- Recursion Error 막기 위해서는 Recursion 횟수 늘려주기
import sys
sys.setrecursionlimit(10000)
n = int(input())
maps = []
rg = []
for _ in range(n):
li = input()
maps.append(list(map(str,li)))
li_ = li.replace('R','G')
rg.append(list(map(str,li_)))
def dfs(l,x,y,c):
dx = [0,0,1,-1]
dy = [1,-1,0,0]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < n:
if l[nx][ny] == c :
l[nx][ny] = 'X'
dfs(l,nx,ny,c)
cnt_1 = 0
cnt_2 = 0
for x in range(n):
for y in range(n):
# 정상인
if maps[x][y] != 'X':
color = maps[x][y]
maps[x][y] = 'X'
dfs(maps,x,y,color)
cnt_1 += 1
for x in range(n):
for y in range(n):
# 적록색약
if rg[x][y] != 'X':
color = rg[x][y]
rg[x][y] = 'X'
dfs(rg,x,y,color)
cnt_2 += 1
print(cnt_1, cnt_2)
📌 다른사람의 문제풀이
- BFS 풀이
from collections import deque
def BFS(x,y):
q.append((x,y))
dx = [-1,0,1,0]
dy = [0,1,0,-1]
visited[x][y] = 1
while q:
x, y = q.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
# 인덱스 범위 안에 있으면서, 같은 색이면서, 방문 안한 경우
if 0<=nx<N and 0<=ny<N and a[nx][ny] == a[x][y] and not visited[nx][ny]:
visited[nx][ny] = 1 # 방문체크 후 큐에 넣음
q.append((nx,ny))
N = int(input())
a = [list(input()) for _ in range(N)]
q = deque()
# 적록색약 아닌 경우
visited = [[0] * N for _ in range(N)]
cnt1 = 0
for i in range(N):
for j in range(N):
if not visited[i][j]: # 아직 방문 안한 경우만 체킹
BFS(i,j)
cnt1 += 1
# 적록색약인 경우
for i in range(N):
for j in range(N):
if a[i][j] == 'G':
a[i][j] = 'R'
visited = [[0] * N for _ in range(N)]
cnt2 = 0
for i in range(N):
for j in range(N):
if not visited[i][j]:
BFS(i,j)
cnt2 += 1
print(cnt1, cnt2)
📌 리뷰
- 적록색약인 경우, R을 G로 바꿔서 탐색해야함
(R, G count 중 큰 것 설정하면 다른 것을 인식하기 때문에 개수 안 맞음!)
- Recursion 개수가 적어서 그냥 넣으면 Recursion Error난다ㅠ 개수 늘리기
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 14503번(구현, 시뮬레이션)_로봇 청소기 (0) | 2023.05.12 |
---|---|
[백준/Python] 16234번(구현, 그래프, BFS, 시뮬레이션)_인구 이동 (0) | 2023.05.12 |
[백준/Python] 1931번(그리디, 정렬)_회의실 배정 (0) | 2023.05.11 |
[백준/Python] 17615번(그리디)_볼 모으기 (0) | 2023.05.09 |
[백준/Python] 7562번(그래프, BFS)_나이트의 이동 (0) | 2023.05.08 |
Comments