반응형
🔺 문제
13398번: 연속합 2
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
// A 배열 저장하기
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int[] A = new int[N];
for(int i = 0 ; i < N ; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
// L 배열 채우기 (왼쪽 → 오른쪽으로 idx를 포함한 최대 연속 합)
int[] L = new int[N];
L[0] = A[0];
int result = L[0];
for(int i = 1 ; i < N ; i++) {
L[i] = Math.max(A[i], L[i - 1] + A[i]);
result = Math.max(result, L[i]); // 기본 최댓값 : 1개도 제거하지 않을 때
}
// R 배열 채우기 (오른쪽 → 왼쪽으로 idx를 포함한 최대 연속 합)
int[] R = new int[N];
R[N - 1] = A[N - 1];
for(int i = N - 2 ; i >= 0 ; i--) {
R[i] = Math.max(A[i], R[i + 1] + A[i]);
}
// 🔔 L[i-1] + R[i+1] : i번째 값을 제거한 효과
for(int i = 1 ; i < N - 1 ; i++) {
result = Math.max(result, L[i - 1] + R[i + 1]);
}
bw.write(result + "\n");
bw.flush();
bw.close();
br.close();
}
}
|
cs |
✅ 해결 아이디어
✔ DP - 점화식
- 배열 L : 왼쪽 → 오른쪽으로 idx를 포함한 최대 연속 합
- 배열 R : 오른쪽 → 왼쪽으로 idx를 포함한 최대 연속 합
- L[ i - 1 ] + R[ i + 1 ] : i번째 값을 제거한 효과
🔺 다른 풀이들
- 1차원 배열 풀이, 2차원 배열 풀이 둘 다 올려주심
[BOJ] 백준 13398번 : 연속합 2 (JAVA)
문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 또, 수열
steady-coding.tistory.com
- 2차원 배열 과정 설명 굿
[백준 13398번] 연속합 2 (java)
13398번: 연속합 2 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 백
lotuslee.tistory.com
💬 느낀 점
DP야.. 우리 언제쯤 친해지니..?
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 7/6 |
(참고)
✔ Do it 알고리즘 코딩테스트 자바편
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1915번: 가장 큰 정사각형 (1) | 2023.05.16 |
---|---|
[백준/JAVA] 9252번: LCS 2 (0) | 2023.05.16 |
[백준/JAVA] 10844번: 쉬운 계단 수 (0) | 2023.05.15 |
[백준/JAVA] 2193번: 이친수 (1) | 2023.05.15 |
[백준/JAVA] 14501번: 퇴사 (0) | 2023.05.15 |