728x90
#10026번 적록색약 (https://www.acmicpc.net/problem/10026)
그냥 풀었다.
dfs를 두 번 돌리면 된다.
import sys
sys.setrecursionlimit(10**6)
n = int(input())
draw = [[x for x in input()] for __ in range(n)]
ans, ans_rg = 0, 0
moves = [[-1, 0], [1, 0], [0, -1], [0, 1]]
def is_valid(y, x):
return (0 <= x < n) and (0 <= y < n)
visited = [[False for _ in range(n)] for __ in range(n)]
def search(y, x):
n_color = draw[y][x]
for my, mx in moves:
ny, nx = y + my, x + mx
if is_valid(ny, nx) and (not visited[ny][nx]) and draw[ny][nx] == n_color:
visited[ny][nx] = True
search(ny, nx)
visited_rg = [[False for _ in range(n)] for __ in range(n)]
def search_rg(y, x):
n_color = ["B"] if draw[y][x] == "B" else ["R", "G"]
for my, mx in moves:
ny, nx = y + my, x + mx
if is_valid(ny, nx) and (not visited_rg[ny][nx]) and draw[ny][nx] in n_color:
visited_rg[ny][nx] = True
search_rg(ny, nx)
# for d in draw:
# print(d)
# for v in visited:
# print(v)
for i in range(n):
for j in range(n):
if not visited[i][j]:
search(i, j)
ans += 1
if not visited_rg[i][j]:
search_rg(i, j)
ans_rg += 1
# print("after")
# for d in draw:
# print(d)
# for v in visited:
# print(v)
print(ans, ans_rg)
시간복잡도고 뭐고 그냥 막 풀었다. (N의 최대치가 100이라서)
근데 풀렸다.
뭐지.. 감을 다시 잡은건가
'Algorithm > acmicpc.net' 카테고리의 다른 글
투포인터 안녕? (#30804 과일 탕후루) (0) | 2024.08.06 |
---|---|
바쁘다 바빠 (#21736 헌내기는 친구가 필요해) (0) | 2024.07.05 |
예외를 찾아내는 능력 (#7569 토마토) (1) | 2024.07.03 |
파이썬 리스트의 원소를 한번에 출력하고 싶다면 (#14940) (0) | 2024.07.02 |
파이썬 round 함수에 0.5를 입력하면? (#18110) (0) | 2024.07.01 |