티스토리 뷰
좀 더 클린한 코드로 리팩토링이 필요해보이나, List와 DFS 개념을 활용하여 해결하였다.
방문 배열을 만들어주고, 정상인의 경우와 적녹색약인 경우 각각의 함수를 정의하지 않고, 정상인일 경우를 해결한 후에 적색을 녹색으로 변경하여 다시 한번 깊이 우선 탐색을 돌려주었다.
import sys
sys.setrecursionlimit(10 ** 9)
n = int(input())
arr = list()
for _ in range(n):
arr.append(list(input()))
# 정상인의 경우, 색을 따로 구분
visit = [[False for _ in range(n)] for _ in range(n)]
normal = 0
def dfs(x, y, c):
global arr
visit[x][y] = True
if x - 1 >= 0:
if arr[x - 1][y] == c and not visit[x - 1][y]:
dfs(x-1, y, c)
if x + 1 < n:
if arr[x + 1][y] == c and not visit[x + 1][y]:
dfs(x+1, y, c)
if y - 1 >= 0:
if arr[x][y - 1] == c and not visit[x][y - 1]:
dfs(x, y-1, c)
if y + 1 < n:
if arr[x][y + 1] == c and not visit[x][y + 1]:
dfs(x, y+1, c)
for i in range(n):
for j in range(n):
if not visit[i][j]:
normal += 1
dfs(i, j, arr[i][j])
# 적녹색약인 경우, 녹색이나 적색을 서로의 색을 바꾸어준다
for i in range(n):
for j in range(n):
if arr[i][j] == 'R':
arr[i][j] = 'G'
visit = [[False for _ in range(n)] for _ in range(n)]
obs = 0
for i in range(n):
for j in range(n):
if not visit[i][j]:
obs += 1
dfs(i, j, arr[i][j])
print(normal, obs)
'PS (Problem Solving)' 카테고리의 다른 글
[BOJ, Swift] 17298 - 오큰수 ( with 스택 ) (0) | 2022.09.16 |
---|---|
[BOJ, Swift] 1786 - 찾기 ( with KMP 알고리즘 ) (0) | 2022.09.13 |
[BOJ, Swift] 1021 - 회전하는 큐 ( with 덱(Dequeue) ) (0) | 2022.08.13 |
[BOJ, Python] 람다(lambda)를 활용한 리스트 정렬 (0) | 2022.07.24 |
[BOJ, Swift] 18258 - 큐 2 (0) | 2022.07.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 곱셈의 역원
- Javascript
- 정보시각화
- 백트래킹
- Python
- pyrebase
- DFS
- CSV
- TIP
- HTML
- c++
- CSS
- how to start without storyboard
- 파이썬
- SVG
- swift
- how to remove border of tabbarcontroller
- 알고리즘
- PS
- 하노이탑이동순서
- D3
- xcode
- SceneDelegate
- BOJ
- ios
- 백준
- 보라매사옥
- 자료구조
- Array
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함