1. 문제

https://www.acmicpc.net/problem/2073

 

2073번: 수도배관공사

아기염소들이 언덕에서 풀을 뜯고 놀다 보면 항상 도중에 목이 마르곤 했다. 그들은 불편함을 참지 못하고 수도관을 설치하여 거리 D(7 ≤ D ≤ 100,000)만큼 떨어진 곳의 강에서 물을 끌어오기로

www.acmicpc.net

2. 접근방법

1. dp배열 생성

2. 각 컬럼은 배관의 길이

3. 값은 그 길이를 만들 수 있는 값 중 최대값

4. dp 계산은 역순으로 진행

5. 이전 값은 현재 값에 영향을 주지만 더 큰 값은 현재값에 영향을 주지 않으므로 역순으로 진행 시 배열 하나에서 진행가능

6. 각 길이에서 현재 파이프를 연결시켜보기

7. dp [ 각 길이 - 현재 파이프 길이 ] 의 값과 현재 파이프 값 중 작은 값

8. 7번의 값과 현재 만들어진 최대값 dp[ 각 길이 ] 중 큰 값을 dp에 저장

9. dp[목표길이] 값 출력

3. 자바 코드

package Gold;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class G5_2073수도배관공사 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int D = Integer.parseInt(st.nextToken());
		int P = Integer.parseInt(st.nextToken());
		int dp[] = new int[D + 1];
		dp[0] = Integer.MAX_VALUE;
		for (int i = 0; i < P; i++) {
			st = new StringTokenizer(br.readLine());
			int l = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());
			for (int j = D; j >= l; j--)
				dp[j] = Math.max(dp[j], Math.min(dp[j - l], c));
		}
		System.out.println(dp[D]);
	}
}

4. 마치며

dp 설명 어려워ㅓ

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 22945 팀빌딩  (0) 2021.12.28
[백준] 1806 부분합  (0) 2021.12.21
[백준] 14567 선수과목 (Prerequisite)  (0) 2021.12.08
[백준] 2624 동전 바꿔주기  (2) 2021.11.30
[백준] 1715 카드 정렬하기  (0) 2021.11.26

+ Recent posts