Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- 적정 스레드
- deque
- 몬티홀
- 분할정복
- 프로세스
- 면접복기
- GC
- Python
- Markdown
- BFS
- 배열 돌리기1
- 마크다운
- 그래프 탐색
- 브루트포스
- GarbageCollector
- g1gc
- 정수론
- DP
- 구현
- 이진탐색
- Stack
- 그래프탐색
- 그리디
- springboot
- 회고
- 빌더패턴
- Greedy
- github
- 문제풀이
Archives
- Today
- Total
FeelingXD
[백준 - 4963] 섬의 개수 🐢 본문
❓ Problem
🤔 How
이
❗ Solve
# 섬의 개수
import sys
from collections import deque
input = sys.stdin.readline
moves = [(0, 1), (0, -1), (1, 0), (-1, 0), (-1, -1), (1, 1), (-1, 1), (1, -1)]
SEA = 0
LAND = 1
CHECKED = 2
def draw_board(row) -> list:
return [list(map(int, input().split())) for _ in range(row)]
def search_island() -> int:
cnt = 0
for y in range(len(board)):
for x in range(len(board[0])):
if board[y][x] == LAND:
bfs(y, x)
cnt += 1
return cnt
def check_oob(y, x):
return 0 <= y < r and 0 <= x < c
def bfs(y, x): # y,x 부터 이동가능한 섬을 탐색
q = deque()
q.append((y, x))
while q:
cy, cx = q.popleft()
for dy, dx in moves:
ny, nx = dy + cy, dx + cx
if not check_oob(ny, nx): # 범위 초과시 넘기기
continue
if board[ny][nx] == LAND:
board[ny][nx] = CHECKED
q.append((ny, nx))
pass
def solution():
global board
global r, c
while (row_coloum := tuple(map(int, input().split()))) != (0, 0):
c, r = row_coloum
board = draw_board(r)
print(search_island())
pass
if __name__ == "__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[백준 - 31589] 포도주 시음 🍷 (0) | 2024.03.16 |
---|---|
[프로그래머스 - 131120] 3월에 태어난 여성 회원 목록 출력하기 📃 (0) | 2024.03.14 |
[프로그래머스 - 284531] 노선별 역 사이 거리 조회하기 🐢 (0) | 2024.03.13 |
[프로그래머스-42895 ] N으로 표현 🔑 (0) | 2024.03.09 |
[백준-1074] Z ✨ (0) | 2024.02.28 |