Skip to content

[12주차] DAY1-dayeon - #242

Open
K-Dayeon03 wants to merge 29 commits into
HamJiWeon:mainfrom
K-Dayeon03:week12/dayeon/0812
Open

[12주차] DAY1-dayeon#242
K-Dayeon03 wants to merge 29 commits into
HamJiWeon:mainfrom
K-Dayeon03:week12/dayeon/0812

Conversation

@K-Dayeon03

Copy link
Copy Markdown
Collaborator

이슈 번호

#238

1.1 문제 이름

더 맵게

1.2 문제 정의

[input]

  • scoville: 각 음식의 스코빌 지수를 담은 정수 배열
  • K: 목표 스코빌 지수

모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 가장 맵지 않은 음식 2개를 선택해 새로운 음식을 만든다.

새로운 음식의 스코빌 지수는 다음과 같이 계산한다.

가장 맵지 않은 음식 + (두 번째로 맵지 않은 음식 × 2)

모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하고, 섞은 횟수의 최솟값을 반환한다.

만약 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없다면 -1을 반환한다.

1.3 알고리즘 설계

  • 매번 가장 작은 스코빌 지수 2개를 꺼내야 하므로 PriorityQueue를 사용한다.
  • scoville 배열의 모든 값을 최소 힙에 저장한다.
  • 힙의 최솟값이 K보다 작은 동안 다음 과정을 반복한다.
    1. 가장 작은 값 first를 꺼낸다.
    2. 두 번째로 작은 값 second를 꺼낸다.
    3. first + second * 2로 새로운 스코빌 지수를 계산한다.
    4. 계산한 값을 다시 힙에 추가한다.
    5. 섞은 횟수를 1 증가시킨다.
  • 힙에 음식이 1개만 남았는데 해당 값이 K보다 작다면 더 이상 섞을 수 없으므로 -1을 반환한다.
  • 최솟값이 K 이상이라면 지금까지 섞은 횟수를 반환한다.

1.4 시간 복잡도

$O(N \log N)$

  • N개의 값을 PriorityQueue에 삽입하는 과정에서 최대 O(N log N)
  • 음식을 섞을 때마다 poll, add 연산이 각각 O(log N)
  • 최대 N-1번의 혼합이 발생할 수 있으므로 전체 시간 복잡도는 O(N log N)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant