Early Riser
생각정리
Early Riser
전체 방문자
오늘
어제
  • 분류 전체보기 (128)
    • JS (19)
    • React (33)
    • React Native (2)
    • Library, Tool (13)
    • CSS (2)
    • Algorithm (40)
    • Computer Science (3)
    • 회고 (3)
    • AI (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • local minima
  • 완전탐색
  • 손실함수
  • lightgbm
  • 구현
  • 백트래킹
  • 부스트캠프 9기
  • js
  • 백준
  • 알고리즘
  • 파이썬
  • RNN
  • 비동기
  • 부스트캠프 합격
  • javascript
  • LGBM
  • dfs
  • 밑바닥
  • 오늘의불경
  • 프로그래머스
  • global minima
  • 논문리뷰
  • 부스트캠프 합격 후기
  • 자바스크립트
  • boosting
  • useEffect
  • useState
  • react
  • 딥러닝
  • BFS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Early Riser

생각정리

백준 2468번: 안전영역 (파이썬, DFS)
Algorithm

백준 2468번: 안전영역 (파이썬, DFS)

2022. 8. 22. 16:24

문제 자체는 기본적인 DFS의 구현이였으나 안전한 영역의 최대 개수를 구하기 위해 한번의 과정이 더 필요하였다.

2차원 배열이기 때문에 각 배열의 원소들에 접근하기 위해서는 2중 반복문이 필수이다.

이때 높이는 1이상 100이하 정수이고 N은 100보다 작으므로 3중 반복문이라 하더라도 100^3=10^6, 시간복잡도는 O(N^3)으로 시간초과에 걸리지는 않는다. 따라서 입력되는 배열들 각각에 max함수를 적용후, 그 값들에 다시 max함수를 적용하여 반복문의 최대 range를 정하고 dfs를 적용하면 된다.

import sys
sys.setrecursionlimit(1000000)

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


def dfs(x, y):
    visited[x][y] = True
    for __ in range(4):
        nx = x + dx[__]
        ny = y + dy[__]
        if 0 <= nx < N and 0 <= ny < N and graph[nx][ny] > min_ and not visited[nx][ny]:
            dfs(nx, ny)


N = int(sys.stdin.readline())

ans = []
graph = []

input_ = list(map(int, sys.stdin.readline().split()))
graph.append(input_)
min_list = set(input_)

for _ in range(N-1):
    input_ = list(map(int, sys.stdin.readline().split()))
    graph.append(input_)
    min_list.update(input_)

visited = [[False]*N for i in range(N)]

for min_ in range(max(map(max, graph))):
    print(min_)
    land_num = 0
    for alpha in range(N):
        for beta in range(N):
            if graph[alpha][beta] > min_ and not visited[alpha][beta]:
                land_num += 1
                dfs(alpha, beta)
    visited = [[False] * N for i in range(N)]
    ans.append(land_num)

land_num = max(ans)
print(land_num)

'Algorithm' 카테고리의 다른 글

백준 2623번: 음악프로그램 (파이썬, 위상정렬, Cycle)  (4) 2022.08.28
백준 13565번: 침투 (파이썬, DFS)  (0) 2022.08.22
백준 2667번: 단지번호 붙이기 (파이썬, BFS)  (0) 2022.08.22
백준 7576번: 토마토 (파이썬, BFS)  (0) 2022.08.22
백준 1654번: 랜선 자르기 (파이썬, 이분탐색)  (0) 2022.08.22
    'Algorithm' 카테고리의 다른 글
    • 백준 2623번: 음악프로그램 (파이썬, 위상정렬, Cycle)
    • 백준 13565번: 침투 (파이썬, DFS)
    • 백준 2667번: 단지번호 붙이기 (파이썬, BFS)
    • 백준 7576번: 토마토 (파이썬, BFS)
    Early Riser
    Early Riser
    2년차 프론트엔드 개발자입니다. https://github.com/EarlyRiser42

    티스토리툴바