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 |
Tags
- 2638
- 스프링 MVC
- 설탕 배달
- 완도산회
- 스프링
- 프로그래머스
- 백준
- 다이나믹 프로그래밍
- 1로 만들기
- Spring
- 양꼬치
- 쓰레드 풀
- 알고리즘
- BFS
- Servlet
- 문자열 압축
- 동적 프로그래밍
- 맛집 투어
- dp
- 호유동
- 맛집
- 2839
- HTTP API
- 포두부 보쌈
- 투어
- 서블릿
- 2589
- 2020 KAKAO BLIND
- mvc
- 고모네 콩탕
Archives
- Today
- Total
프로그래밍 공방
[백준] 14501번 : 퇴사 본문
문제
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
문제해결방법
이 문제는 DP 배열에 날짜마다 받을 수 있는 최대 금액을 저장해서 풀었습니다.
1. 뒤에서부터 상담 일정표를 보며 DP 배열을 채워나갑니다.
예를 들어 N일에 Ti = 3, Pi = 30 이라는 상담이 있다면, DP[N+1]와 DP[N+3]+Pi을 비교해서 더 큰 값을 DP[N]에 저장합니다.
만약 상담 기간이 퇴사 일자를 넘어서 상담을 할 수 없는 경우에는 DP[N]에 DP[N+1]을 넣어줍니다.
2. DP 배열 중에 가장 큰 값이 최대 금액입니다.
코드
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 | package baekjoon; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main14501_퇴사 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[][] job = new int[2][N+1]; int[] DP = new int[N+1]; StringTokenizer st; for(int i=0; i<N; i++) { st = new StringTokenizer(br.readLine()); job[0][i] = Integer.parseInt(st.nextToken()); job[1][i] = Integer.parseInt(st.nextToken()); } int max = 0; for(int i=N-1; i>=0; i--) { int curVal = 0; if(i+job[0][i]-1<N) curVal = DP[i+job[0][i]]+job[1][i]; DP[i] = Math.max(DP[i+1], curVal); if(max < DP[i]) max = DP[i]; } System.out.println(max); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 구명보트 (0) | 2020.11.25 |
---|---|
[프로그래머스] 압축 (0) | 2020.11.25 |
[백준] 9372번 : 상근이의 여행 (0) | 2020.11.24 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2020.11.22 |
[백준] 20058번 : 마법사 상어와 파이어스톰 (0) | 2020.11.22 |