음료수 얼려먹기 : DFS&BFS

주리·2022년 12월 1일
0

코테_DFS&BFS

목록 보기
1/2
post-thumbnail

변수

  1. n m 입력받을 수
  2. list (graph)
  3. result (최종 아이스크림의 수)

main 함수 로직

  1. n m 입력받기
  2. for n
    for m 돌면서
    list 입력받기
  3. for n
    for m 돌면서 --> (1,1)부터
    if dfs(i,j) == True :
    reuslt +=1

def dfs(i,j) 로직

  1. if (i,j)가 nm보다 크거나 0보다 작으면 : false

  2. if (i,j)==0 :
    (i,j) == 1 로 바꿔주고

    재귀함수 호출
    dfs(i-1,y)
    dfs(i,y-1)
    dfs(i+1,y)
    dfs(i,y+1)

    return True
    return False --> if문에 들어오지않으면 (0이 아니면) False리턴

코드

  • DFS 문제가 처음이라서
    왜 DFS를 이용해야하는지
    어떻게 재귀함수를 이용하는지
    코드를 어떻게 작성할지
    감이 안왔다 ㅜ
  • #주석으로 적어놓은 주희사항들 조심하기
n,m = map(int,input().split())
graph=[]
for i in range(n) :
  graph.append(list(map(int,input().split())))

def dfs(i,j) :
  if i>=n or i<0 or j>=m or j<0 :
  # nm list는 위에서 먼저 입력받아서 사용할 수 있다
  # 인덱스는 0~n-1 , 0~m-1 이기에 nm과 같으면 OutofIndex임을 주희해야한다
    return False
  if graph[i][j] == 0:
    graph[i][j] = 1
    # 2차원 list 표현식에 주의하기

    dfs(i-1,j)
    dfs(i,j-1)
    dfs(i+1,j)
    dfs(i,j+1)

    return True
  return False


result=0
for i in range (n):
  for j in range(m):
    if dfs(i,j) == True:
      result+=1
      # [0,0]부터 [n-1,m-1]까지 돌면서 0으로 시작 → DFS를 탄 애들 1개 당 result+=1 를 여기서 해준다
    
print(result)
profile
완벽한 글 보다, 그 과정들을 기록하는 개발자

0개의 댓글