Conversation
There was a problem hiding this comment.
Pull request overview
이 PR은 BOJ 2073번 "수도배관공사" 문제를 동적 프로그래밍으로 해결한 풀이입니다. 배낭 문제(knapsack problem)와 유사한 접근법을 사용하여, 주어진 거리 D를 채우면서 최소 용량(병목)을 최대화하는 문제를 해결합니다.
- 0-1 배낭 문제 방식의 DP를 사용하여 각 거리에서 달성 가능한 최대 최소 용량을 계산
- 역순 순회를 통해 각 배관을 한 번만 사용하도록 보장
- 배관을 길이 순으로 정렬하여 효율적인 처리
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| D = Integer.parseInt(st.nextToken()); | ||
| P = Integer.parseInt(st.nextToken()); | ||
| pipes = new int[P][2]; | ||
| dp = new int[D+1]; // idx 거리르 구하는 최대 수도관 용량 |
There was a problem hiding this comment.
주석에 오타가 있습니다: "거리르" → "거리를"
| dp = new int[D+1]; // idx 거리르 구하는 최대 수도관 용량 | |
| dp = new int[D+1]; // idx 거리를 구하는 최대 수도관 용량 |
| D = Integer.parseInt(st.nextToken()); | ||
| P = Integer.parseInt(st.nextToken()); | ||
| pipes = new int[P][2]; | ||
| dp = new int[D+1]; // idx 거리르 구하는 최대 수도관 용량 |
There was a problem hiding this comment.
주석에 오타가 있습니다: "idx 거리를 구하는" → "idx 거리까지 도달할 때"가 더 명확합니다. 현재 주석은 의미가 불명확합니다. DP 배열이 "특정 거리까지 도달할 때 가능한 최대 최소 용량"을 저장한다는 것을 명확히 표현해야 합니다.
| dp = new int[D+1]; // idx 거리르 구하는 최대 수도관 용량 | |
| dp = new int[D+1]; // idx 거리까지 도달할 때 가능한 최대 최소 수도관 용량을 저장 |
| } | ||
|
|
||
| Arrays.sort(pipes, Comparator.comparing(a -> a[0])); | ||
| dp[0] = 100001; |
There was a problem hiding this comment.
초기값 100001은 매직 넘버입니다. 의미를 명확히 하기 위해 상수로 선언하는 것이 좋습니다. 예: static final int INF = 100001; 또는 주석으로 "문제의 최대 용량 제약(100000)보다 큰 값"임을 명시해야 합니다.
| int d = pipe[0]; | ||
| int p = pipe[1]; | ||
|
|
||
| for(int i = D;i>= d;i--){ // 더해서 i가 될때 | ||
| dp[i] = Math.max(dp[i], Math.min(p, dp[i-d])); |
There was a problem hiding this comment.
변수명 d와 p가 너무 짧고 모호합니다. length와 capacity 또는 pipeLength와 pipeCapacity로 변경하면 가독성이 향상됩니다.
| int d = pipe[0]; | |
| int p = pipe[1]; | |
| for(int i = D;i>= d;i--){ // 더해서 i가 될때 | |
| dp[i] = Math.max(dp[i], Math.min(p, dp[i-d])); | |
| int length = pipe[0]; | |
| int capacity = pipe[1]; | |
| for(int i = D; i >= length; i--){ // 더해서 i가 될때 | |
| dp[i] = Math.max(dp[i], Math.min(capacity, dp[i-length])); |
| int d = pipe[0]; | ||
| int p = pipe[1]; | ||
|
|
||
| for(int i = D;i>= d;i--){ // 더해서 i가 될때 |
There was a problem hiding this comment.
주석에 띄어쓰기 오류가 있습니다: "더해서 i가 될때" → "더해서 i가 될 때"
| for(int i = D;i>= d;i--){ // 더해서 i가 될때 | |
| for(int i = D;i>= d;i--){ // 더해서 i가 될 때 |
| int d = pipe[0]; | ||
| int p = pipe[1]; | ||
|
|
||
| for(int i = D;i>= d;i--){ // 더해서 i가 될때 |
There was a problem hiding this comment.
[nitpick] 띄어쓰기가 누락되었습니다: i>= → i >=
| for(int i = D;i>= d;i--){ // 더해서 i가 될때 | |
| for(int i = D; i >= d; i--){ // 더해서 i가 될때 |
|
@copilot |
|
@longrunpc I've opened a new pull request, #13, to work on those changes. Once the pull request is ready, I'll request review from you. |
📘 문제 정보
✅ 정답(PR)인 경우 작성
1) 최종 풀이 요약
2) 시간/공간 복잡도
🎯 리뷰 요청 포인트
📝 기타