티스토리 뷰
1. 문제
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
2. 문제 풀이 겸 회고
나 진짜 DP... 못하는데......
하지만 포기하지 않는다... DP.. 단계별로 풀어보고 있지만.. 이번 dp는 처음으로 타 블로그 참고하지 않고
혼자 힘으로 해결해 나갔다는 그러한 이야기... 진짜 뿌듯.... (대견해 이숨)
나는 DP 풀 때 점화식보다는 규칙을 찾는 것 같다.. 이거 맞는지 모르겠는데... ㅠㅠㅠㅠ
규칙을 찾았다!!!...
연속되면서 가장 큰 수를 찾는 건데..
연속된 누적합 구하고 음수가 나오면 다시 처음부터 계산해주기
예시를 들어보면
2 3 -1 3 7 3 9 14 9 10 -> DP 배열로 따로 관리..
이렇게 dp 배열에 값을 저장하면서 계산해주면 된다.
dp[i] = dp[i-1] + num[i] 해줘서 dp값을 차곡차곡 쌓아준다.
하지만
dp[i-1] < 0
dp는 연속된 합의 값이니깐 음수일 경우는 굳이 필요 없고 값만 더 낮추는 것이기 때문에 리셋 (num값 다시 데려오기)
dp[i] = num[i] 현재부터 다시 시작
이런 식으로 값 구해줘서
dp 배열에서 가장 큰 값 찾아주면 끗~~~~~~~~~~
3. 코드
package net.acmicpc.solution;
import java.util.*;
import java.io.*;
public class Solution_1912_연속합 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] num = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < num.length; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
int[] dp = new int[N];
dp[0] = num[0];
for (int i = 1; i < num.length; i++) {
if (dp[i - 1] < 0) {
dp[i] = num[i];
} else {
dp[i] = dp[i - 1] + num[i];
}
}
//System.out.println(Arrays.toString(dp));
int max = num[0];
for (int i = 1; i < dp.length; i++) {
max = Math.max(dp[i], max);
}
System.out.println(max);
}
}
피드백은 언제나 환영입니다 :) 🌳
'algo > 백준' 카테고리의 다른 글
[백준] 16234_인구이동 (JAVA) (0) | 2022.09.28 |
---|---|
[백준] 11052_카드 구매하기 (JAVA) (0) | 2022.09.20 |
[백준] 20055_컨베이어 벨트 위의 로봇(JAVA) (2) | 2022.09.19 |
[백준] 19948_음유시인 영재 (JAVA) (0) | 2022.07.08 |
[백준] 20300_서강근육맨 💪 (JAVA) (0) | 2022.06.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AI교육
- 프로그래머스 롤케이크자르기
- JAVA 할인행사
- java 마법사 상어와 파이어볼
- 서울ICT이노베이션
- IT개발캠프
- 정보통신산업진흥원
- 멀티버스 java
- 멀리 뛰기 자바
- 백엔드
- 플그 멀리 뛰기
- 1개 Key 여러개 Value
- Java 멀리 뛰기
- AI캠프
- 프로그래머스 할인행사
- NIPA
- 마법사상어와 파이어볼
- 자바 return
- 메서드형 void
- 백준 멀티버스 자바
- 18868 멀티버스 java
- AI-WEB 교육
- 할인행사 자바
- JAVA 컬랙션
- java 멀티버스
- HashMap 자바
- 프론트엔드
- 16234 마법사 상어와 파이어볼
- 유데미
- level2 롤케이크 자르기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함