일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 동적계획법
- X
- 백준
- discord.js
- Message Passing
- 2156
- Chrome Extension
- 파이썬
- 백준 7579
- popup
- 공부시간측정어플
- 자료구조
- supabase
- 프로그래머스 #정수삼각형 #동적계획법
- content script
- 크롬 익스텐션
- 디스코드 봇
- background script
- webpack
- react
- 갓생
- C언어로 쉽게 풀어쓴 자료구조
- 캠스터디
- 포도주시식
- nodejs
- 백준 #7568번 #파이썬 #동적계획법
- 크롬 확장자
- TypeScript
- Today
- Total
히치키치
[백준] 7579번 : 토마토 - Python(파이썬) 본문
문제
https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
포인트
1. 입력 :
관념적으로 (행, 열)으로 들어지만 해당 문제는 (열, 행)으로 들어옴
M=열, N=행으로 입력 받는 코드 작성하여 헷갈리지 않도록 하자
2. 시작점이 여러 개
미로탈출(백준 2178)과 다르게 익은 토마토(시작점)가 여러개 존재함
여러 시작점에 대한 4방향 탐색 동시에 이뤄져야 함
익은 토마토가 존재하는 좌표를 모두 que에 넣자
3. 탐색 불필요한 경우 존재
토마토가 존재하지 않는 곳(-1) 이 존재함
별 다른 처리/코드 작성 없이 오직 토마토가 아직 익지 않은 경우(0)에만 기준점+1 되도록 작성
4. Flag=False 사용해 결과값 출력
이중 리스트에 특정 값 존재하면 -1로 결과 나오게 해야 함
방법 1 ) 이중 for문 돌다가 모두 중지하려면 결과값 출력 후 exit(1) 사용
방법 2 ) 이중 for문 돌다가 특정값 나오면 flag=True 로 값 수정
이후 flag 값에 따라 결과값 출력
5. 이중리스트 내 최대값 출력
map 함수 사용
참고 ) https://devbull.xyz/python-2caweon-baeyeolyi-coedaegabs-coesogabs-cajgi/
Python 2차원 배열의 최대값, 최소값 찾기
(update: 2022-04-22) HM Kim 님 덕분에 잘못된 정보를 찾았습니다. 감사합니다. 처음 드는 생각 가끔 알고리즘 문제풀이를 하다보면 어떤 iterable의 최대값 또는 최소값을 찾아야 하는 경우가 발생한다.
devbull.xyz
전체 코드
from collections import deque
import sys
input=sys.stdin.readline
M,N=map(int, input().split())
graph=[list(map(int, input().split())) for _ in range(N)]
dx=[1,-1,0,0]
dy=[0,0,1,-1]
que=deque([])
res=0
flag=False
#print(N,M, graph, visited, dx,dy)
for i in range(N):
for j in range(M):
if graph[i][j]==1:
que.append([i,j])
def bfs():
while que:
x,y=que.popleft()
for k in range(4):
nx, ny=x+dx[k], y+dy[k]
if 0<=nx<N and 0<=ny<M and graph[nx][ny]==0:
que.append([nx, ny])
graph[nx][ny]=graph[x][y]+1
bfs()
for i in range(N):
for j in range(M):
if graph[i][j]==0:
flag=True
break
if flag:
print(-1)
else:
print(max(map(max,graph))-1)
'알고리즘 스터디' 카테고리의 다른 글
[백준] 1074번 : Z - Python(파이썬) (0) | 2022.06.13 |
---|---|
[백준] 4179번 : 불! - Python(파이썬) (0) | 2022.06.03 |
[백준] 6549번 : 히스토그램에서 가장 큰 직사각형- Python(파이썬) (0) | 2021.08.24 |
[백준] 2571번 : 색종이 - 3 - Python(파이썬) (0) | 2021.08.10 |
[백준] 4485번 : 녹색 옷 입은 애가 젤다지 - Python(파이썬) (0) | 2021.08.10 |