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이라서)

 

근데 풀렸다.

 

뭐지.. 감을 다시 잡은건가