본문 바로가기

스터디 1일 1커밋

240414 [BOJ/백준] 4963. 섬의 개수

https://www.acmicpc.net/problem/4963

 

4963번: 섬의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도

www.acmicpc.net


나의 코드

while True:
    w, h = map(int, input().split())
    maps = [list(map(int, input().split())) for _ in range(h)]
    visited = [[0]*w for _ in range(h)]
    di = [-1, -1, 0, 1, 1, 1, 0, -1]
    dj = [0, 1, 1, 1, 0, -1, -1, -1]
    q = []
    count = 0

    if w == 0 and h == 0:
        break

    for i in range(h):
        for j in range(w):
            if maps[i][j] == 1 and visited[i][j] == 0:
                visited[i][j] = 1
                q.append([i, j])
                count += 1
                while q:
                    x, y = q.pop(0)
                    for k in range(8):
                        ni = x + di[k]
                        nj = y + dj[k]
                        if 0 <= ni < h and 0 <= nj < w and maps[ni][nj] == 1 and visited[ni][nj] == 0:
                            visited[ni][nj] = 1
                            q.append([ni, nj])
    print(count)

 

결과


이건 음식물피하기에서 마지막 입력에 0 0일 때 프로그램을 끝내는 것만 추가하면 되는 문제였다. 똑같이 BFS로 풀어서 성공!