본문 바로가기
개발 노트/알고리즘 문제

백준 2468 안전 영역 (실버 1)

by LeeInGyu 2025. 4. 21.

백준 2468 안전 영역 (실버 1)

링크: 2468 안전 영역


접근 방법

  • 높이 1부터 가장 높은 부분 전까지 반복
  • dfs로 풀이
  • 최악 N, N^2 이므로 dfs 사용 가능함

소스 코드

소스 코드: 93413770 제출

import sys

# 입력
input = sys.stdin.readline
N = int(input())
graph = []
max_height = 0
for _ in range(N):
    line = [int(i) for i in input().split()]
    graph.append(line)

    max_height = max(max(line), max_height) # 최대 높이 구하기

# dfs
delta_x = [1, -1, 0, 0]
delta_y = [0, 0, 1, -1]
def dfs(visited: set, height: int, start_x: int, start_y: int):
    queue = [(start_x, start_y)]
    visited.add((start_x, start_y))

    while len(queue) > 0:
        x, y = queue.pop()

        for i in range(len(delta_x)):
            new_x = x + delta_x[i]
            new_y = y + delta_y[i]

            if 0 <= new_x < N and 0 <= new_y < N:
                if (new_x, new_y) not in visited and graph[new_x][new_y] > height:
                    visited.add((new_x, new_y))
                    queue.append((new_x, new_y))

# 높이와 지점 설정
max_safe_area = 1
for height in range(1, max_height):
    visited = set()
    safe_area = 0

    for x in range(N):
        for y in range(N):
            if graph[x][y] > height and (x, y) not in visited:
                dfs(visited, height, x, y)
                safe_area += 1

    max_safe_area = max(max_safe_area, safe_area)

print(max_safe_area)

코드 개선 사항(GPT 4o)

# 전
while len(queue) > 0:

# 후
while queue: 
  • queue는 iterable 하기 때문에 해당 방식으로 구현해도 문제 없음
# 전
for i in range(len(delta_x)):

# 후
for dx, dy in zip(delta_x, delta_y):
  • 이게 더 직관적인 것 같다.
  • len() 함수도 사용하지 않아도 되고, 값을 그대로 사용하기 때문에 코드 오타 문제도 적어질 것으로 예상

결론

  • 문제를 푸는데, 어려움은 없었다.
  • 하지만 GPT가 더 범용적인 코드를 사용하게 좋다는 조언을 했는데, 문제에 맞춘 코드보다 어느 코드에서나 쓰일 수 있게 작성하는게 확실히 좋아보인다.
728x90
반응형