-문제: https://www.acmicpc.net/problem/10026

쉬운 문제인데 적록색약 입장에서 갯수세는데 필요한 아이디어가 생각이 안났다.

 

 

bfs로 진행하고, i,j 위치에있는 문자값과 같은 것을 기준으로 진행하면 된다고 생각했지만

'R'을 'G'로 바꾸어서 적록색약 진행하는 거랑 map(str~)이 부분을 잘 하지 못했다

for _ in range(n):
    s.append(list(map(str,input())))
for i in range(n):
    for j in range(n):
        if s[i][j]=='G':
            s[i][j]='R'

 

-정답풀이:

from collections import deque
n=int(input())
s=[]
for _ in range(n):
    s.append(list(map(str,input())))
dx=[-1,1,0,0]
dy=[0,0,-1,1]
visit=[[0]*(n+1) for _ in range(n+1)]

def bfs(x,y):
    queue=deque()
    queue.append([x,y])
    word=s[x][y]
    while queue:
        x,y=queue.popleft()
        for i in range(4):
            nx,ny=x+dx[i],y+dy[i]
            if 0<=nx<n and 0<=ny<n and s[nx][ny]==word and visit[nx][ny]==0:
                queue.append([nx,ny])
                visit[nx][ny]=1
ans=0
for i in range(n):
    for j in range(n):
        if not visit[i][j]:
            bfs(i,j)
            ans+=1
print(ans,end=' ')

for i in range(n):
    for j in range(n):
        if s[i][j]=='G':
            s[i][j]='R'
visit=[[0]*(n+1) for _ in range(n+1)] 
ans=0
for i in range(n):
    for j in range(n):
        if not visit[i][j]:
            bfs(i,j)
            ans+=1
print(ans)

+ Recent posts