-문제: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
'백준 > Search' 카테고리의 다른 글
[백준/dfs] 3584번: 최소공통 조상 (0) | 2022.03.11 |
---|---|
[백준/dfs] 1103번: 게임 (0) | 2022.03.10 |
[백준/dfs] 1941번: 소문난 칠공주 (0) | 2022.03.08 |
[백준/dfs] 1405번: 미친 로봇 (0) | 2022.03.08 |
[백준/dfs] 2250번: 트리의 높이와 너비(다시) (0) | 2022.03.07 |