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
- MST
- css
- 다이나믹 프로그래밍
- BFS
- 시뮬레이션
- eslint
- python
- 최소신장트리
- 최단거리
- 구현
- 너비우선탐색
- nodejs
- Backjoon
- dp
- React
- algorithm
- LIS
- 깊이우선탐색
- 전위순회
- Java #Backjoon #Algorithm #구현 #시뮬레이션
- Java
- 최장부분증가수열
- vscode
- 후위순회
- HTML
- Prettier
- dfs
- 그래프
- webpack
- js
Archives
- Today
- Total
ULISIA's Developer Life
[Backjoon] 2583 영역 구하기 Python 문제 풀이 본문
출처 : 영역 구하기
문제해석
모눈종이 전체 눈금을 0으로 초기화 한 뒤 사각형을 이루고 있는 부분을 1로 초기화해준다.
모눈종이 전체 눈금 한칸한칸을 탐색하는 기준으로 (0,0)부터 시작해서 흰색(0)을 이루고 있는 부분을 만나면 BFS/DFS 탐색을 시작함과 동시에 영역개수를 증가시킨다.
해당영역내에서 흰칸을 이루고 있는 부분만큼 영역넓이를 구해서 반환해준뒤 해당 넓이를 저장하는 리스트에 추가해준다.
최종적으로 구해진 영역 개수와 영역 넓이 리스트의 값들을 출력한다.
해답코드
import sys
from collections import deque
input = sys.stdin.readline
n, m, k = map(int, input().split())
maps = [[0]*m for _ in range(n)]
for _ in range(k):
x1,y1,x2,y2 = map(int,input().split())
for y in range(y1,y2):
for x in range(x1,x2):
maps[y][x] = 1
dy = [-1,1,0,0]
dx = [0,0,-1,1]
ans=1
area=[]
def bfs(startY,startX):
global ans
q = deque()
q.append([startY,startX])
maps[startY][startX]=2
while q:
y,x = q.popleft()
for d in range(4):
ny,nx = y+dy[d], x+dx[d]
if 0<=ny<n and 0<=nx<m and maps[ny][nx]==0:
ans+=1
maps[ny][nx]=2
q.append([ny,nx])
return ans
for y in range(n):
for x in range(m):
if maps[y][x]==0:
ans=bfs(y,x)
area.append(ans)
ans=1
area.sort()
print(len(area))
for result in area:
print(result, end=" ")'Algorithm > Backjoon' 카테고리의 다른 글
| [Backjoon] 1697 숨바꼭질 Python 문제 풀이 (0) | 2023.07.25 |
|---|---|
| [Backjoon] 1520 내리막 길 Python 문제 풀이 (0) | 2023.07.24 |
| [Backjoon] 2178 미로 탐색 Python 문제 풀이 (0) | 2023.07.23 |
| [Backjoon] 1068 트리 Python 문제 풀이 (0) | 2023.07.22 |
| [Backjoon] 5639 이진 검색 트리 Python 문제 풀이 (0) | 2023.07.21 |