본문 바로가기
알고리즘 문제풀이/백준

백준 2468

by Hoseok 2023. 5. 22.
728x90
반응형

 

*코드

 

import sys
from collections import deque

sys.setrecursionlimit(10**6)

input = sys.stdin.readline

n = int(input())

# 초기 배열
array = [list(map(int, input().split())) for _ in range(n)]

# 최대수 
maxNumber = max(map(max, array))

# 임시 배열
temp_array = [[0] * n for _ in range(n)]

# 물에 잠기는 영역 구분
def area(number):
  for i in range(n):
    for j in range(n):
      if array[i][j] < number:
        temp_array[i][j] = 1  # 물 잠김
      if array[i][j] >= number:
        temp_array[i][j] = 0  # 물 안잠김

# 안전 영역 개수 구하기
# DFS
def dfs(x, y):
  # 상하좌우
  dx = [0, 0, -1, 1]
  dy = [1, -1, 0, 0]

  if temp_array[x][y] == 1: # 방문하였거나 물 잠김
    return False

  # 방문처리
  temp_array[x][y] = 1

  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]
    # 범위 넘어가면 다음 반복문으로
    if nx < 0 or nx >= n or ny < 0 or ny >= n:
      continue
    dfs(nx, ny)
  return True

max_count = 0

for h in range(1, maxNumber+1):
  count = 0
  area(h)

  for i in range(n):
    for j in range(n):
      if dfs(i, j):
        count += 1

  # 임시 배열 초기화
  temp_array = [[0] * n for _ in range(n)]

  max_count = max(max_count, count)

print(max_count)

 

*연산시간 줄일 수 있는 코드로 리팩토링 필요*

 

 

 

728x90
반응형

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

백준 14888 #2  (0) 2023.05.23
백준 14888  (0) 2023.05.23
백준 2667 #2  (0) 2023.05.17
백준 2798 #2  (0) 2023.05.17
백준 10819 #2  (0) 2023.05.17