본문 바로가기

프로그래밍 회고록/Python

2021.11.14 코테_음료수 얼려 먹기

728x90
반응형

# 오늘의 문제

음료수 얼려 먹기

난이도 중  | 풀이시간 30분 | 시간 제한 1초 | 메모리 제한 128m

 # 나의 코드

 재귀함수란 개념이 낯설어서 아직은 제대로 코드 현이 되지 않아 많은 참고를 받은후에 코드를 구현했다.

n,m = map(int, input().split())

graph = []

for i in range(n):
graph.append(list(map(int, input())))

cnt = 0

def dfs(x,y):

    if x< -1 or y < -1 or x >= n or y >= m :
    	return False

    if graph[x][y] == 0:
    	graph[x][y] = 1

        #좌로 재귀함수
        dfs(x+1,y)
        #우로 재귀함수
        dfs(x-1,y)
        #상으로 재귀함수
        dfs(x,y+1)
        #하로 재귀함수
        dfs(x,y-1)
        return True

    return False

for i in range(n):
    for j in range(m):
        if dfs(i,j) == True:
            cnt += 1

print(cnt)

# 정답과의 비교

1.  탐색이라는 알고리즘을 구현할때 DFS든 BFS든 재귀함수를 머리속에서 그려서 함수를 구현하는 컴퓨터적인 사고가 아직은 낯설어서 부족한 것 같다. 많은 문제를 접해서 경험치를 쌓아야함을 느꼈다.

n,m = map(int, input().split())

graph = []

for i in range(n):
graph.append(list(map(int, input())))


def dfs(x,y):

    if x< -1 or y < -1 or x >= n or y >= m :
    	return False

    if graph[x][y] == 0:
    	graph[x][y] = 1


        dfs(x+1,y)
        dfs(x,y+1)
        dfs(x-1,y)
        dfs(x,y-1)
        return True

    return False

resunt = 0
for i in range(n):
    for j in range(m):
        if dfs(i,j) == True:
            resunt += 1

print(resunt)
 
728x90