본문 바로가기
Data Science/알고리즘 공부

[백준][파이썬] 1012 유기농 배추 BFS

by titaniumm 2020. 3. 26.

[핵심]

BFS 분류되는 이유는 결국 1과 붙어있는것들을 모두 제거할때 count가 증가하기떄문이다.

연습해야할 코딩 방식

1. dx dy를 이용한 좌표처리 그리고 경계값 -1일때 인덱스 에러 안나게 범위 설정해주는것

2. 재귀함수를 이용한것이 아니라 While문으로 활용

3. [0]*n으로 배열을 만들면 이상하게 다르게 값이 출력된다.. (이유는 아직 모름) 주소값을 공유하는 개념때문인가?

여러번 코딩해서 구조 익힐것

numcase = int(input())
dx = [-1,0,0,1]
dy = [0,1,-1,0]
def recu(x,y):
    check = [[x,y]]
    while check:
        checka = check[0][0] #x,y값 저장
        checkb = check[0][1]
        del check[0]
        for i in range(4):
            X= checka +dx[i]
            Y= checkb + dy[i]
            if 0<=X<n and 0<= Y <m and lit[X][Y] == 1:
                lit[X][Y] =0
                check.append([X,Y])

for k in range(numcase):
    count =0
    n,m,case = map(int,input().split())
    lit = [[0 for _ in range(m)] for __ in range(n)]
    for q in range(case): #밭만들기
        x,y = map(int,input().split())
        lit[x][y] = 1

    for i in range(n):
        for j in range(m):
            if lit[i][j] == 1:
                recu(i,j)
                lit[i][j] = 0
                count = count+1
    print(count)

댓글