문제
정수 사각형 차이의 최소 2 설명 | 코드트리
정수 사각형 차이의 최소 2를 풀며 문제 구성과 난이도를 파악해 적절한 알고리즘을 선정해보세요. 효율적인 코드 작성을 목표로 합니다.
www.codetree.ai
풀이
문제 요약
주어진 N * N 행렬에 대해 (1, 1)에서 오른쪽/아래로만 이동하며 (N, N)까지 도달하는 경로에 적혀있는 수의 최댓값과 최솟값의 차이를 가장 작게 만들자.
아이디어
경로의 최대/최소값을 모두 기록하며, 두 수의 차를 최소화 해야한다.
점화식은 다음과 같다.
dp[i][j][k] : 현재 경로까지 가장 작은 값이 k일 때 경로 중 있었던 가장 큰 값 중 가능한 최솟값
즉 현재 위치(i, j)에 대해 이전 경로(i - 1, j), (i, j - 1)의 유효한 모든 k에 대해 최솟값을 가져와야 한다. 이전 경로의 k가 작을 때의 결과가 정답이 아닐 수 있기 때문이다.
N = int(input())
grid = [None] + [[0, *map(int, input().split())] for _ in range(N)]
# Please write your code here.
INF = int(1e10)
dp = [[[INF] * 101 for _ in range(N + 1)] for _ in range(N + 1)]
dp[1][1][grid[1][1]] = grid[1][1]
for i in range(1, N + 1):
for j in range(1, N + 1):
for k in range(1, 101):
min_k = min(k, grid[i][j])
만약 이전 경로에 최솟값이 k인적이 없다면 초기값 INF가 그대로 전이된다
결과 부분에서 INF가 아님을 체크 후 결과를 확인하자.
dp[i][j][min_k] = min(dp[i][j][min_k],
max(grid[i][j], min(dp[i - 1][j][k], dp[i][j - 1][k])))
res = INF
for k in range(1, 101):
if dp[N][N][k] != INF:
res = min(res, dp[N][N][k] - k)
print(res)
풀이시간
30분
소스코드
problem-solving/code-tree/Algorithm Intro/DP I/11 정수 사각형 차이의 최소 2(challenge-minimum-difference-on-the-intege
Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.
github.com
'PS > Code Tree' 카테고리의 다른 글
[Code Tree] 최대 증가 부분 수열 [Python] (0) | 2025.07.01 |
---|---|
[Code Tree] 정수 사각형 최댓값의 최소 [Python] (0) | 2025.06.29 |
[Code Tree] 정수 사각형 최장 증가 수열 [Python] (0) | 2025.06.27 |
[Code Tree] 정수 사각형 최솟값의 최대 [Python] (0) | 2025.06.26 |
[Code Tree] 정수 사각형 최소 합 [Python] (0) | 2025.06.25 |