[이코테] DFS/BFS_음료수 얼려 먹기 (python) (푸는중)

juyeon·2022년 6월 29일
0

문제

나의 풀이(작성중)

1.

n, m = map(int, input().split())
graph = [list(map(int, input())) for _ in range(n)]
visited = [[0] * m] * n

go = (-1, 0), (0, 1), (1, 0), (0, -1) #URDL

x, y = (0, 0)

count = 0
result = 0

for i in range(len(go)):
new_x = x + go[i]
new_y = y + go[i]
if new_x < 0 or new_x > n or new_y < 0 or new_y > m
continue

if graph[x][y] == graph[new_x][new_y] == 0:
    
if visited[x][y] == 2
count += 1

elif visited[new_x][new_y] == 0
visited[x][y] = 1
x = new_x
y = new_y

else
visited[x][y] = 2
x = new_x
y = new_y


if visited[new_x][new_y] == 2 or graph[new_x][new_y] == 1
x = new_x
y = new_y

2. 이번에는.. 스택 만들기

visited = [[] for _ in range(n * m)]
if graph[x][y] == 0
	v = y + (x * y)
	for i in range(4): #사방을 돌아보면서
		new_x = x + dir[i][0] #옆칸 위치 설정
		new_y = y + dir[i][1]
		
		#얼음 틀을 벗어나는 경우, 넘어감
		if new_x < 0 or new_x > n or new_y < 0 or new_y > m:
			continue 
		if graph[new_x][new_y] == 0 and new_y + (new_x * new_y) not in visited[v]:
			visited[v].append(new_y + (new_x * new_y)) #스택 만들기

: 재귀함수를 쓰고싶은데, 아직 재귀함수는 너무 어렵다ㅠㅠ 연습하고 다시 풀어봐야지

3. 결국 모범답안 보고 유사하게 만들어보는데..다른 값이 나온다ㅠㅠ

n, m = map(int, input().split()) #입력
graph = [list(map(int, input())) for _ in range(n)] #얼음 틀 입력
dir = [(-1, 0), (0, 1), (1, 0), (0, -1)] #북동남서 방향
result = 0 #결과값 카운트
def visit(x, y):
	for i in range(4): #북동남서를 한번씩 돌아보며
		new_x = x + dir[i][0]
		new_y = y + dir[i][1]
		#범위를 벗어나는 경우 넘어감
		if new_x < 0 or new_x >= n or new_y < 0 or new_y >= n:
			return False
		
		#현재 노드를 아직 방문하지 않았다면, 방문 처리
		if graph[x][y] == 0:
			graph[x][y] = 1
		#재귀함수
		visit(new_x, new_y)
		#연결되었다는 표시
		return True
	return False
for a in range(n):
	for b in range(m):
		#연결된 공간이 있다면, 결과 카운트
		if visit(a, b) == True:
			result += 1
print(result)

: 뭐가 문제일까?!

profile
내 인생의 주연

0개의 댓글