GreatAlgorithm-Study / AlgorithmStudy

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

[9주차_금요일] 행복 유치원 #116

Closed Jewan1120 closed 1 week ago

Jewan1120 commented 2 weeks ago
### 🤔 시간복잡도 고려사항

### 💡 풀이 아이디어
yeongleej commented 1 week ago

🤔 시간복잡도 고려사항

=> O(N * N)은 불가(X), O(N) or O(NlogN)으로 생각해보기

💡 풀이 아이디어

icegosimperson commented 1 week ago

🤔 시간복잡도 고려사항

1 ≤ K, N ≤ 300,000 -> O(N)

💡 풀이 아이디어

KodaHye commented 1 week ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

  1. K개의 Deque를 만들고, 마지막 idx부터 확인하면서 최솟값과 최댓값의 차이를 줄여주는 방식 → 시간 초과
    • 최악의 경우 300,000 * 299,999 * ... * 2 * 1 이렇게 되서 그런 것 같음
  2. 그리디
    • int[] diff = new int[N];
    • int result: 사용되는 비용
      • idx를 1부터 마지막 까지 탐색하며 이전값과 현재값의 차이를 구함
    • 티셔츠를 만드는 비용이 최소가 되도록 K개의 조로 만들어야 함
      • 배열 diff에서 차이가 큰 부분을 기준으로 조를 나누어서 비용이 들지 않도록 함 (Arrays.sort(diff))
      • for(int i = 0; i < N - K; i++) result += diff[i];
baexxbin commented 1 week ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

처음에 투포인터로 복잡하게 풀었는데,, 정렬 개념 잘 사용하기

Jewan1120 commented 1 week ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

yeahdy commented 1 week ago

🤔 시간복잡도 고려사항

💡 풀이 아이디어

왜 N-K 개 만큼의 값들을 합산하는가?

1. 초기 상태:
children 배열이 [1 3 5 6 10] 이고, 각 원소 간의 차이 값을 계산한 costs 배열은 [2 2 4 1]

2. costs 배열 정렬:
오름차순으로 정렬하면 [1 2 2 4]

3. K개의 그룹으로 나누기⭐:
예를 들어, K=3 이라고 가정하면, 3개의 그룹으로 나누기 위해서는 K-1개를 기준으로 그룹을 나눌 수 있습니다.
문제의 요구사항인 최소 비용을 구하기 위해 2개(K-1)의 가장 큰 차이 값(4와 2)을 기준으로 그룹을 나누면
[1 3], [5 6], [10] 와 같이 3개의 그룹으로 나뉘게 됩니다.

4. 작은 차이 값들 합산하기⭐:
K-1 개는 그룹을 나누는 기준이기 때문에 이를 제외하면 "(N-1)-(K-1) = N-K" 이 되고,
남은 차이 값들인 [1 2] 를 합산하면 K개의 조로 나누었을 때, 티셔츠를 만드는 최소 비용이 됩니다.