728x90
반응형
※ 문제링크
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
해당문제는 BFS로 해결할 수 있는 문제였다. 구현할 때 정상인 사람의 경우에는 입력좌표값과 상, 하, 좌, 우 좌표값의 색이 완전히 일치할때만 연결해주고, 적록색약의 경우 R, G의 경우는 통합시켜서 연결해주면 쉽게 해결할 수 있는 문제였다. 자세한 풀이방법과 코드는 아래와 같다.
1. 입력값을 2차원 배열의 형태로 변환시켜준다.
2. 정상인 사람과 적록색약인 사람을 나누어서 각각 탐색할 BFS함수를 작성해준다.
3. 결과값을 출력해준다.
+ 시간 및 메모리 단축을 위해 sys함수를 사용하였으며, 사용시에는 개행문자에 유의해서 사용하도록 하자.
import sys
from collections import deque
N = int(input())
field = []
for _ in range(N):
color_list = input()
sample = []
for color in color_list:
sample.append(color)
field.append(sample)
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs1(): # 정상인
queue = deque()
visited = [[False for _ in range(N)] for _ in range(N)]
cnt = 0
for x in range(N):
for y in range(N):
if visited[y][x] == False:
visited[y][x] = True
queue.append([x, y])
while queue:
sx, sy = queue.popleft()
for i in range(4):
nx = sx + dx[i]
ny = sy + dy[i]
if 0 <= nx < N and 0 <= ny < N and visited[ny][nx] == False and field[y][x] == field[ny][nx]:
visited[ny][nx] = True
queue.append([nx, ny])
cnt += 1
return cnt
def bfs2(): # 적록색약
queue = deque()
visited = [[False for _ in range(N)] for _ in range(N)]
cnt = 0
for x in range(N):
for y in range(N):
if visited[y][x] == False:
visited[y][x] = True
queue.append([x, y])
while queue:
sx, sy = queue.popleft()
for i in range(4):
nx = sx + dx[i]
ny = sy + dy[i]
if 0 <= nx < N and 0 <= ny < N and visited[ny][nx] == False:
if field[y][x] == 'R' or field[y][x] == 'G':
if field[ny][nx] == 'R' or field[ny][nx] == 'G':
visited[ny][nx] = True
queue.append([nx, ny])
else:
if field[y][x] == field[ny][nx]:
visited[ny][nx] = True
queue.append([nx, ny])
cnt += 1
return cnt
print(bfs1(), bfs2())
P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.
728x90
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 9370번 미확인 도착지 / 사용언어 : 파이썬(python) (0) | 2022.01.17 |
---|---|
[BOJ] 1504번 특정한 최단 경로 / 사용언어 : 파이썬(python) (0) | 2022.01.16 |
[BOJ] 1753번 최단경로 / 사용언어 : 파이썬(python) (0) | 2022.01.15 |
[BOJ] 4963번 섬의 개수 / 사용언어 : 파이썬(python) (0) | 2022.01.15 |
[BOJ] 18352번 특정 거리의 도시 찾기 / 사용언어 : 파이썬(python) (0) | 2022.01.14 |
댓글