Algorithm/acmicpc.net
감을 잡았나? (#10026번 적록색약)
winney916
2024. 7. 4. 10:45
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이라서)
근데 풀렸다.
뭐지.. 감을 다시 잡은건가