일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- css #웹 #생활코딩
- 파이썬
- PYTHON
- BFS
- 백준
- DFS
- java #자바 #동빈나
- java #자바
- 다이나믹프로그래밍
- dp
- 투포인터
- Dijkstra
- 백트랙킹
- 알고리즘
- css #생활코딩 #웹
- 재귀
- 백준 #파이썬 #알고리즘 #코딩테스트
- java #자바 #나동빈
- 자바 #java
- react #리액트 #동빈나 #나동빈 #유튜브강의
- react #리액트 #동빈나
- 프로그래머스
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 파이썬 #백준 #알고리즘 #코딩테스트
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- java #자바 #생활코딩
- 백준 #알고리즘 #파이썬 #코딩테스트
- 다익스트라
- 코딩테스트
Archives
- Today
- Total
커리까지
[백준] 음식물 피하기 파이썬 본문
728x90
SMALL
문제
코레스코 콘도미니엄 8층은 학생들이 3끼의 식사를 해결하는 공간이다. 그러나 몇몇 비양심적인 학생들의 만행으로 음식물이 통로 중간 중간에 떨어져 있다. 이러한 음식물들은 근처에 있는 것끼리 뭉치게 돼서 큰 음식물 쓰레기가 된다.
이 문제를 출제한 선생님은 개인적으로 이러한 음식물을 실내화에 묻히는 것을 정말 진정으로 싫어한다. 참고로 우리가 구해야 할 답은 이 문제를 낸 조교를 맞추는 것이 아니다.
통로에 떨어진 음식물을 피해가기란 쉬운 일이 아니다. 따라서 선생님은 떨어진 음식물 중에 제일 큰 음식물만은 피해 가려고 한다.
선생님을 도와 제일 큰 음식물의 크기를 구해서 “10ra"를 외치지 않게 도와주자.
입력
첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다.
좌표 (r, c)의 r은 위에서부터, c는 왼쪽에서부터가 기준이다. 입력으로 주어지는 좌표는 중복되지 않는다.
출력
첫째 줄에 음식물 중 가장 큰 음식물의 크기를 출력하라.
예제 입력 1
3 4 5
3 2
2 2
3 1
2 3
1 1
예제 출력 1
4
제출 답안
- 1,2,3번 주석은 요즘 보는 강의에서 알려줘서 하고 있는데 유용하다. 시간 복잡도는 아직 공부가 더 필요하다.
- 기본 DFS랑 구조가 같고 마지막에 max만 비교해주면 된다.
'''
1. 아이디어
- 2중 for, 음식물 좌표를 1로
2. 시간 복잡도
- O(v+E)
- v : N*M
- E : 4M
M(N+4)
3. 자료구조
- int[][]
- bool[][]
'''
import sys
sys.setrecursionlimit(10^9)
input = sys.stdin.readline
N, M, K = map(int, input().split())
graph = [[0] * M for _ in range(N)]
visited = [[False] * M for _ in range(N)]
for _ in range(K):
r, c = map(int, input().split())
graph[r-1][c-1] = 1
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
each = 0
def dfs(y, x):
global each
each += 1
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if 0<=ny<N and 0<=nx<M:
if graph[ny][nx] == 1 and not visited[ny][nx]:
visited[ny][nx] = True
dfs(ny, nx)
max_cnt = 0
for j in range(N):
for i in range(M):
if graph[j][i] == 1 and not visited[j][i]:
visited[j][i] = True
each = 0
dfs(j, i)
max_cnt = max(each, max_cnt)
print(max_cnt)
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[백준] 13565번 침투 파이썬 (1) | 2022.12.08 |
---|---|
[백준] 18352번 특정 거리의 도시 찾기 파이썬 (0) | 2022.12.07 |
[백준] 효율적인 해킹 파이썬 (0) | 2022.12.05 |
[프로그래머스] 삼각 달팽이 파이썬 (0) | 2022.12.04 |
[프로그래머스] N-Queen 파이썬 (0) | 2022.12.03 |
Comments