광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 자바
  • 개념
  • 다이나믹 프로그래밍
  • 합주
  • 프로그래머스
  • 오블완
  • DP
  • BFS
  • 파이썬
  • BOJ
  • 드린이
  • 운영체제
  • 티스토리챌린지
  • 애플워치 앱 만들기
  • OS
  • 알고리즘
  • 구현
  • 컴퓨터 사이언스
  • 애플워치 앱

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

[Python/파이썬 백준 2468] 안전 영역(BFS)
알고리즘/문제 풀이

[Python/파이썬 백준 2468] 안전 영역(BFS)

2021. 3. 4. 17:06
반응형

www.acmicpc.net/problem/2468

 

2468번: 안전 영역

재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는

www.acmicpc.net

풀이

check 해주는 그래프를 3중 리스트로 사용했는데 z 범위를 가장 큰 높이로 받아서 3중 리스트를 선언해주었습니다.

z를 0~height-1 까지 범위를 잡아서 BFS를 돌렸는데 z범위가 엄청 헷갈렸...(0을 포함 안하고 돌렸었는데 틀렸다해서 넣었더니 성공... 안내릴 경우도 포함해주는건가...)

cnt로 안전 영역을 세주고

최대 영역 값을 max로 판단했더니 성공~

#안전 영역
# z를 0~ 제일 큰 높이까지 계산해줘서
# check를 3중 그래프로 만들어주는데 z를 높이를 나타내는데 사용
from collections import deque
import sys
input=sys.stdin.readline

graph=[]
n=int(input())

dx=[-1,1,0,0]
dy=[0,0,-1,1]
height=0
max_size=0

for _ in range(n):
    h=list(map(int,input().split()))
    for i in range(len(h)):
        height = max(h[i],height)
    graph.append(h)

check=[[[False]*n for _ in range(n)]for _ in range(height)]
def bfs(x,y,z):
    queue=deque()
    queue.append([x,y])
    check[z][x][y]=True
    while queue:
        x,y=queue.popleft()
        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if 0<=nx<n and 0<=ny<n and check[z][nx][ny]==False and graph[nx][ny]>z:
                queue.append([nx,ny])
                check[z][nx][ny]=True

for z in range(0,height):
    cnt=0
    for i in range(n):
        for j in range(n):
            if graph[i][j]>z and check[z][i][j]==False:
                bfs(i,j,z)
                cnt+=1
        max_size=max(max_size,cnt)

print(max_size)
반응형

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Python/파이썬 3190 백준] 뱀  (0) 2021.03.10
[Python/파이썬 백준 13460] 구슬탈출2 (BFS)  (0) 2021.03.09
[Python/파이썬 백준 5104] 스타트링크(BFS)  (0) 2021.03.04
[Python/파이썬 백준 2206] 벽 부수고 이동하기(BFS)  (0) 2021.03.02
[Python/파이썬 백준 1012] 유기농 배추(BFS)  (0) 2021.02.25
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Python/파이썬 3190 백준] 뱀
    • [Python/파이썬 백준 13460] 구슬탈출2 (BFS)
    • [Python/파이썬 백준 5104] 스타트링크(BFS)
    • [Python/파이썬 백준 2206] 벽 부수고 이동하기(BFS)
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바