섹션7. 단지 번호 붙이기 (DFS)
안녕하세요, 강사님.
아래 제 풀이는 in3.txt에 대한 올바른 답을 반환하지 못합니다.
그 이유에 대해서 알 수 있을까요?
즉 강사님의 코드와 제 코드의 차이점에 대해 좀 더 자세히 알 수 있을까요?
<강사님 코드>
import sys
sys.stdin=open("input.txt", "r")
dx=[-1, 0, 1, 0]
dy=[0, 1, 0, -1]
def DFS(x, y):
global cnt
cnt+=1
board[x][y]=0
for i in range(4):
xx=x+dx[i]
yy=y+dy[i]
if 0<=xx<n and 0<=yy<n and board[xx][yy]==1:
DFS(xx, yy)
if name=="__main__":
n=int(input())
board=[list(map(int, input())) for _ in range(n)]
res=[]
for i in range(n):
for j in range(n):
if board[i][j]==1:
cnt=0
DFS(i, j)
res.append(cnt)
print(len(res))
res.sort()
for x in res:
print(x)
<제 코드>
import sys
sys.stdin=open("input.txt", "r")
dx=[-1, 1, 0, 0]
dy=[0, 0, -1, 1]
# '1'인 지점으로부터 그 주위 '1'인 애들 탐색
def DFS(x,y):
global cnt
for i in range(4):
xx=x+dx[i]
yy=y+dy[i]
if 0<=xx<n and 0<=yy<n and board[xx][yy]==1:
board[xx][yy]=0
cnt+=1
DFS(xx,yy)
if name=="__main__":
n=int(input())
board=[list(map(int, input())) for _ in range(n)]
res=[]
# 먼저 '1'인 지점을 출발점으로 삼고 DFS 호출하기
for i in range(n):
for j in range(n):
if board[i][j]==1:
cnt=0
DFS(i,j)
res.append(cnt)
res.sort()
print(len(res))
for x in res:
print(x)
답변 2
1
안녕하세요^^
import sys
sys.stdin=open("input.txt", "r")
dx=[-1, 1, 0, 0]
dy=[0, 0, -1, 1]
# '1'인 지점으로부터 그 주위 '1'인 애들 탐색
def DFS(x,y):
global cnt
for i in range(4):
xx=x+dx[i]
yy=y+dy[i]
if 0<=xx<n and 0<=yy<n and board[xx][yy]==1:
board[xx][yy]=0
cnt+=1
DFS(xx,yy)
if name=="__main__":
n=int(input())
board=[list(map(int, input())) for _ in range(n)]
res=[]
# 먼저 '1'인 지점을 출발점으로 삼고 DFS 호출하기
for i in range(n):
for j in range(n):
if board[i][j]==1:
cnt=0
DFS(i,j)
res.append(cnt)
res.sort()
print(len(res))
for x in res:
print(x)위 코드는 첫 줄발하는 격자를 카운트하지 않습니다.
for i in range(n):
for j in range(n):
if board[i][j]==1:
board[i][j] = 0
cnt=1
DFS(i,j)
res.append(cnt)위와 같이 바꿔주면 됩니다.
0
안녕하세요^^
들여쓰기가 되어 있지 않아 해석이 힘듭니다. 코드블록 버튼을 이용해서 들여쓰기가 된 코드를 올려주시면 좋겠습니다.
0
네, 제 코드는 아래와 같습니다.
import sys
sys.stdin=open("input.txt", "r")
dx=[-1, 1, 0, 0]
dy=[0, 0, -1, 1]
# '1'인 지점으로부터 그 주위 '1'인 애들 탐색
def DFS(x,y):
global cnt
for i in range(4):
xx=x+dx[i]
yy=y+dy[i]
if 0<=xx<n and 0<=yy<n and board[xx][yy]==1:
board[xx][yy]=0
cnt+=1
DFS(xx,yy)
if name=="__main__":
n=int(input())
board=[list(map(int, input())) for _ in range(n)]
res=[]
# 먼저 '1'인 지점을 출발점으로 삼고 DFS 호출하기
for i in range(n):
for j in range(n):
if board[i][j]==1:
cnt=0
DFS(i,j)
res.append(cnt)
res.sort()
print(len(res))
for x in res:
print(x)
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
78
2
스택에서 ')'을 만나는 경우
0
80
3
문제가 어디있나요?
0
67
2
변수 or 함수명
0
62
1
침몰하는 타이타닉 문제 질문입니다
0
58
1
AA.py 책점 에러
0
60
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
161
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
166
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
93
0
5번 틀림
0
115
0
오류원인?
0
98
0
리스트 선언
0
108
1
침몰하는 타이타닉(그리디) 문제 질문
0
110
1
알고리즘
0
69
1
코딩테스트
0
92
1
DFS 순서 질문드립니다.
0
129
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





