일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AI Tech 4기
- 장고
- 웹 프로그래밍
- 4기
- 프로그래머스
- 2021 Dev-matching 웹 백엔드 개발자
- 웹
- cs50
- 백준
- sts
- boostcourse
- 대회
- 부스트캠프
- Django
- AI Tech
- 네이버
- Naver boostcourse
- BOJ
- Naver boostcamp
- 구현
- QNA 봇
- 서버
- P Stage
- 파이썬
- 레벨2
- 백엔드
- 풀스택
- Customer service 구현
- 프로그래밍
- 서블릿
- Today
- Total
daniel7481의 개발일지
[BOJ]1743 음식물 피하기 본문
https://www.acmicpc.net/problem/1743
문제
코레스코 콘도미니엄 8층은 학생들이 3끼의 식사를 해결하는 공간이다. 그러나 몇몇 비양심적인 학생들의 만행으로 음식물이 통로 중간 중간에 떨어져 있다. 이러한 음식물들은 근처에 있는 것끼리 뭉치게 돼서 큰 음식물 쓰레기가 된다.
이 문제를 출제한 선생님은 개인적으로 이러한 음식물을 실내화에 묻히는 것을 정말 진정으로 싫어한다. 참고로 우리가 구해야 할 답은 이 문제를 낸 조교를 맞추는 것이 아니다.
통로에 떨어진 음식물을 피해가기란 쉬운 일이 아니다. 따라서 선생님은 떨어진 음식물 중에 제일 큰 음식물만은 피해 가려고 한다.
선생님을 도와 제일 큰 음식물의 크기를 구해서 “10ra"를 외치지 않게 도와주자.
입력
첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다.
좌표 (r, c)의 r은 위에서부터, c는 왼쪽에서부터가 기준이다. 입력으로 주어지는 좌표는 중복되지 않는다.
출력
첫째 줄에 음식물 중 가장 큰 음식물의 크기를 출력하라.
풀이
전형적인 그래프 문제였던 것 같다. 실버1인만큼 난이도는 높지 않았다. BFS를 이용하여 모든 인덱스를 탐색한 후, 아직 방문하지 않았고 음식물 쓰레기가 있을 경우 queue에 넣어준 후, 방문처리를 해주면서 q에 담겨진 갯수만큼 음식물 쓰레기가 인접해있는 것이므로 최대 음식물 쓰레기 크기를 업데이트 해주었다.
import sys
from collections import deque
input = lambda: sys.stdin.readline().rstrip()
n, m, k = map(int, input().split())
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
matrix = [[0 for _ in range(m)]for _ in range(n)]
for _ in range(k):
a, b = map(int, input().split())
matrix[a-1][b-1] = 1
visited = [[False for _ in range(m)]for _ in range(n)]
max_cnt = 0
for i in range(n):
for j in range(m):
if matrix[i][j] == 1:
if not visited[i][j]:
q = deque()
tempt_cnt = 0
visited[i][j] = True
q.append([i, j])
while q:
x, y= q.popleft()
#print(x, y)
tempt_cnt += 1
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if nx < 0 or ny < 0 or nx >= n or ny >= m:
continue
if visited[nx][ny]:
continue
visited[nx][ny] = True
if matrix[nx][ny] == 1:
q.append([nx, ny])
if max_cnt < tempt_cnt:
max_cnt = tempt_cnt
print(max_cnt)
'BOJ' 카테고리의 다른 글
[BOJ]16918 봄버맨 (0) | 2022.07.06 |
---|---|
[BOJ]15591 MooTube(Silver) (0) | 2022.07.03 |
[BOJ] 2251 물통 (0) | 2022.06.28 |
[BOJ]13023 ABCDE (0) | 2022.06.28 |
[BOJ]연세대학교 미래캠퍼스 슬기로운 코딩생활 Open Contest (0) | 2022.06.25 |