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

처음에는 dfs로 풀려고 했는데, 잘 풀리지 않아서 bfs로 풀어보았다. 

그런데 함수의 값을 반환해서 어떻게 해보려고 했는데 그게 잘 되지 않아 구글링을 했다.

찾아보니 bfs가 끝났을 때 s 행렬을 바꿔주는 방식으로 진행하면 따로 반환없이 바로 출력하면 된다 

 

찾아보니 이 블로그가 설명이 더 깔끔한 것 같다. 이거를 기준으로 다시 공부 해봐야할 것 같다

참고한 블로그

 

-정답풀이:

from collections import deque

def bfs(cur_r,cur_c,itr):
    q=deque()
    q.append([cur_r,cur_c])
    v[cur_r][cur_c]=itr
    cnt=1
    tmp=[]
    while q:
        x, y=q.popleft()
        for dx, dy in dr:
            nx, ny=x+dx, y+dy
            if 0<=nx<n and 0<=ny<m and v[nx][ny]!=itr:
                if not a[nx][ny]:
                    q.append([nx, ny])
                    v[nx][ny]=itr
                    cnt+=1
                else:
                    tmp.append([nx, ny])
                    v[nx][ny]=itr
    for i, j in tmp:
        c[i][j] += cnt
        
n,m=map(int,input().split())
a=[list(map(int,input())) for _ in range(n)]
v=[[0]*m for _ in range(n)]
c=[[0]*m for _ in range(n)]
dr=[[-1,0],[1,0],[0,-1],[0,1]]
itr=1
for i in range(n):
    for j in range(m):
        if a[i][j]:
            c[i][j]=1
for i in range(n):
    for j in range(m):
        if not a[i][j] and not v[i][j]:
            bfs(i,j,itr)
            itr+=1
for i in range(n):
    for j in range(m):
        print(c[i][j] % 10, end='')
    print()

 

 

-틀린풀이:

나름 작성해본 코드인데 함수에서 반환하는 것을 잘 못해서 TypeError가 발생했다 

함수에 대해 공부해야할 것 같다,,,

 

 

from collections import deque
n,m=map(int,input().split())
s=[list(map(int,list(input()))) for _ in range(n)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
ones=[]
for i in range(n):
    for j in range(m):
        if s[i][j]==1:
            ones.append([i,j])
def bfs(x,y):
    q=deque()
    q.append((x,y))
    cnt=1
    while q:
        x,y=q.popleft()       
        for i in range(4):
            nx,ny=x+dx[i],y+dy[i]
            if 0<=nx <n and 0<=ny<m:
                if not s[nx][ny]:
                    cnt+=1
                    q.append((nx,ny))
                else:
                    continue 
    return cnt
for i in range(len(ones)):
    for x,y in ones[i]:
        ans=bfs(x,y)
        s[x][y]=ans%10
for i in range(n):
    print(s[i])

 

오류 발생한 부분

 

2022.08.09

IDE에서 오류나는 걸로 다음과 같이 코드 작성했더니 정상작동했다 

이때는 아직 코드작성이 더 미숙해서 겪었던 문제였던 것 같다 

for x,y in ones :
    ans = bfs(x,y)
    s[x][y] = ans % 10

+ Recent posts