Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 공부정리
- java
- heap
- Java heap
- heap정렬
- 개발상식
- 객체프로그래밍
- 자바문자열
- 알고리즘
- 프렌즈4블록java
- 카카오코딩테스트
- 카카오코테
- 자료구조 트리
- 프로그래머스
- 카카오기출
- 객체프로그래밍이란
- java method
- 프렌즈4블록
- 카카오1차
- 코딩테스트기출
- 백준 1924번
- 힙정렬자바
- 자료구조힙
- 백준 1000번 java
- 백준 1000번
- 코테준비
- 백준 1924번 java
- 문자열포맷
- 자바
Archives
- Today
- Total
일단 시작해보는 블로그
[알고리즘_풀이] 백준 14501번, 퇴사. DP 본문
전형적인 dp문제 중, 최댓값(Math.max) 구하는 것.
bottom-up,
저장해놓은 것보다 큰 값이면 ok아니면 새로 계산한 값 넣기의 종류
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 상담 가능 일자
int[] T = new int[N+10]; // 상담을 완료하는데 걸리는 일자
int[] P = new int[N+10]; // 상담을 했을 때 받을 수 있는 돈
int[] dp = new int[N+10];// dp memoization을 위한 배열
//1부터 N까지 입력받는다.
for(int i=1; i<=N; i++){
T[i] = sc.nextInt();
P[i] = sc.nextInt();
}
int max = 0; // i일 이전까지의 최대로 받을 수 있는 값
// 돈은 일을 끝마친 다음날에 입금된다고 생각하면 된다. 따라서 N+1(퇴사일)이 됐을 때, 얼마 받는지가 최대금액
for(int i=1; i<=N+1; i++){
// i일 이전까지의 최댓값과 자기자신 중 큰 값.
dp[i] = Math.max(max, dp[i]);
// i일에 상담했을 때, 받을 수 있는 돈은 i+T[i]인 상담이 다 끝난 후에 받는다. 따라서 이때를 계산해주는 부분
if(i+T[i] <= N+1){
dp[i+T[i]] = Math.max(dp[i+T[i]], dp[i] + P[i]);
}
// i까지 했을 때 최댓값 구하는 부분. 이제 i+1로 넘어가기전, 최댓값을 담아주고 다음 루프에서 이전까지의 최댓값으로서 쓰인다.
// 루프가 끝난다면 어쨌든 마지막 날까지의 최댓값이기 때문에 정답으로 출력해주면 된다.
if(max < dp[i]){
max = dp[i];
}
}
System.out.println(max);
}
}
https://www.acmicpc.net/problem/14501
'CS > 알고리즘 풀이' 카테고리의 다른 글
[알고리즘_풀이] 백준 2579번 계단 오르기, DP (0) | 2019.09.16 |
---|---|
[알고리즘_풀이] DP문제, 백준 9465번 스티커 (0) | 2019.09.16 |
[알고리즘_풀이] 백준 backjoon 1202번, 보석 도둑 (0) | 2019.09.15 |
[알고리즘_풀이] 백준 1107, 리모컨 (0) | 2019.09.06 |
[알고리즘_풀이] 카카오 코딩테스트, 실패율 Java (0) | 2019.08.30 |
Comments