728x90
문제
12841번: 정보대 등산
boj.ma
풀이
왼쪽의 1번부터 오른쪽 N번까지 횡단보도를 하나만 건너서 갈 때 최소 거리를 구하는 문제다.
횡단보도를 제외한 나머지 구간의 합을 매번 구하면 시간초과가 발생한다.
누적합을 미리 계산해 주자.
최대 거리가 10만인 10만 개의 구간의 주어진다. long을 사용하자.
// Solve
long[] prefixSumL = new long[N];
long[] prefixSumR = new long[N];
for (int i = 1; i < N; ++i) {
prefixSumL[i] = prefixSumL[i - 1] + L[i - 1];
prefixSumR[i] = prefixSumR[i - 1] + R[i - 1];
}
첫 번째 횡단보도부터 시작해서 N번째 횡단보도까지 하나씩 건너보자.
총 거리는 횡단보도를 건너기 전 왼쪽 구간의 합 + 횡단보도 길이 + 횡단보도를 건넌 후 오른쪽 구간의 합이다. 최소 거리가 여러 개라면 번호가 낮은 지점을 출력하므로 조건 분기 내에서 인덱스를 기록해주자.
long res = Long.MAX_VALUE, idx = -1;
for (int i = 0; i < N; ++i) {
final long temp = prefixSumL[i] + A[i] + (prefixSumR[N - 1] - prefixSumR[i]);
if (temp < res) {
res = temp;
idx = i;
}
}
풀이 시간
8분
소스코드
https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/12841.java
problem-solving/baekjoon-online-judge/easy/12841.java at main · rogi-rogi/problem-solving
Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.
github.com
728x90
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 01940] 주몽 [Java] (0) | 2025.04.30 |
---|---|
[백준33559] Infinite Array Swaps [Java] (0) | 2025.04.29 |
[백준 03076] 상근이의 체스판 [Java] (1) | 2025.04.28 |
[백준 14655] 욱제는 도박쟁이야!! [Java] (0) | 2025.04.27 |
[백준 14402] 야근 [Java] (0) | 2025.04.25 |