Notice
Recent Posts
Recent Comments
Tags
- 백준 DFS와 BFS
- BFS
- Django
- programmers
- 알고리즘 공부
- Spring 초보
- spring 기초
- TIL
- Django 기초
- 항해99
- 프로그래머스
- 프로그래머스 level1
- 장고
- 스프링 기초
- 프로그래머스 레벨1
- 알고리즘 문제
- 백준
- 백준 구현
- 항해99 코테 스터디
- 백준 다이나믹프로그래밍
- 코테 연습
- 장고 기초
- 코딩테스트
- dp 알고리즘
- 99클럽 코테 스터디
- 코테
- 스프링 초보
- 코딩테스트 연습
- 백준 dp
- 이분탐색
Archives
- Today
- Total
일일구름 IT
[99클럽 코테 스터 TIL 8일차 / 백준 2667] 단지 번호 붙이기 (Python) 본문
일단 문제를 보면 넓이를 구하는 것이기 때문에 BFS 방법을 사용해야 한다는 것을 알 수 있다.
내 코드
from collections import deque
# 방향
dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]
# 지도 크기 입력받기
n = int(input())
Map = []
num = []
# 지도 상태 입력받기
for i in range(n):
Map.append(list(map(int, list(input()))))
queue = deque([])
def bfs() :
cnt = 0 # 단지 수
for i in range(n):
for j in range(n):
house_num = 0 # 단지에 속하는 집 수
if Map[i][j] == 1:
cnt += 1
queue.append([i,j])
while queue:
# 첫 위치 큐에 삽입
x, y = queue.popleft()
for dx, dy in dir:
nx, ny = x + dx, y + dy
# 범위를 벗어나지 않고 이동 가능한 경우 해당 위치 큐에 삽입
if 0 <= nx < n and 0 <= ny < n and Map[nx][ny] == 1:
Map[nx][ny] = -1
queue.append([nx, ny])
house_num += 1
if house_num == 0:
house_num = 1
num.append(house_num)
print(cnt)
num.sort()
for i in num:
print(i)
bfs()
이어져 총 단지 수와 단지내 수 모두 구해야하기 때문에 지도를 돌며 방문한적이 없고 1인 경우 이어져 있는 집 개수를 구하도록 하였고 이때 단지수는 +1이 된다. 그리고 while문내에서 이어진 집이 무엇인지 구하는데 이때 이어진 집을 구할때마다 해당 단지의 집 개수는 +1이된다.
1. for문을 통해 모든 위치를 조사하는데 해당위치의 집을 방문해본적 없고 값이 1인 경우, 이어진 집이 있는지 조사
2. 이때 단지 수 +1
3. while문을 이용해 queue가 없을때까지 반복
4. 해당 집의 좌, 우, 상, 하를 조사하여 방문한적 없고 값이 1인 경우 queue에 해당 집 넣고 방문한 것을 표시하기 위해 Map[nx][ny] 에 값 -1을 넣어준다
5. 집 수 +1
6. while 반복문이 끝나면 해당 단지의 집 개수를 num리스트에 넣어준다
7. 단지 내 집 개수인 num 리스트를 sort함수를 이용해 오름차순으로 정렬해준다
https://www.acmicpc.net/problem/2667
'99클럽 코테 스터디 TIL' 카테고리의 다른 글
[99클럽 코테 스터디 TIL 7일차 / 백준 1697] 숨바꼭질 (Python) (0) | 2025.01.21 |
---|---|
[99클럽 코티 스터디 TIL 6일차 / 백준 1260] DFS와 BFS (Python) (0) | 2025.01.20 |
[99클럽 코테 스터디 TIL 4일차 / 백준 2343] 기타 레슨 (Python) (0) | 2025.01.16 |
[99클럽 코테 스터디 TIL 3일차 / 백준 11663] 선분 위의 점 (Python) (0) | 2025.01.15 |
[99클럽 코테 스터디 TIL 2일차 / 백준 1654] 랜선 자르기 (Python) (0) | 2025.01.14 |