GreatAlgorithm-Study / AlgorithmStudy

🌟알고리즘 대장정🌟
6 stars 4 forks source link

[7주차_금요일] 수도배관공사 #87

Closed KodaHye closed 3 weeks ago

KodaHye commented 1 month ago
### 🤔 시간복잡도 고려사항

### 💡 풀이 아이디어
Jewan1120 commented 4 weeks ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

int[] dp = new int[d + 1];
dp[0] = Integer.MAX_VALUE; // 최솟값을 찾기 위해 첫 시작은 최대로 초기화
// 중복 선택이 불가능한 0-1 Knapsack
for (int i = 0; i < p; i++) {
    for (int j = d; j >= length[i]; j--) {
        // j길이를 만들었을 때 가질 수 있는 파이프의 최대 넓이
        dp[j] = Math.max(dp[j], Math.min(dp[j - length[i]], width[i]));
    }
}
System.out.println(dp[d]);

문제가 신기했습니다

baexxbin commented 4 weeks ago

🤔 시간복잡도 고려사항


💡 풀이 아이디어

  int[] dp = new int[D + 1];
  dp[0] = Integer.MAX_VALUE;
  for (int i = 1; i <= P; i++) {
      for (int j = D; j >= len[i]; j--) {
          dp[j] = Math.max(dp[j], Math.min(dp[j - len[i]], cost[i]));
      }
  }
  System.out.println(dp[D]);
icegosimperson commented 4 weeks ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

KodaHye commented 4 weeks ago

🤔 시간복잡도 고려사항

거리 × 파이프의 개수 < 1억 (거의 1억에 가까움) 이내로 풀이해야 됨

💡 풀이 아이디어

for(int i = 1; i < P + 1; i++) {
    for(int j = D; j >= pipes[i].l; j--) {
        int min = Math.min(dp[j - pipes[i].l], pipes[i].c);
        dp[j] = Math.max(dp[j], min);
    }
}
yeongleej commented 4 weeks ago

🤔 시간복잡도 고려사항

=> O(D * P) 가능

💡 풀이 아이디어

yeahdy commented 3 weeks ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

dp[j] = Math.max(dp[j], Math.min(dp[j - len[i]], cost[i]));

수도관의 용량은 그것을 이루는 파이프들의 용량 중 최솟값 → 수도관의 용량 = 어떤 수도관을 만들었을 때 여러 파이프 구성 중에 용량이 가장 작은 값

완성된 파이프들 중 가장 큰 용량을 구해야 한다. → 만들어진 여러개의 수도관 중 최대 용량 구하기 (수도관은 최소 1개 이상 만들 수 있음)