Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BOJ Python
- Javascript
- 웹페이지 만들기
- Python
- C언어
- siss
- 숙명여자대학교 정보보안 동아리
- 백준
- 드림핵
- WarGame
- hackctf
- 자료구조 복습
- Sookmyung Information Security Study
- 풀이
- BOJ
- SWEA
- hackerrank
- 머신러닝
- The Loard of BOF
- CSS
- 숙명여자대학교 정보보안동아리
- 파이썬
- 생활코딩
- lob
- PHP 웹페이지 만들기
- XSS Game
- c
- HTML
- 기계학습
- c++
Archives
- Today
- Total
혜랑's STORY
[HackerRank] Jesse and Cookies 본문
1주차 자료구조 복습
Practice > Data Structures > Heap
풀이
문제를 살펴보면 배열의 최소값이 주어진 K보다 커야 한다. 이때 최소힙으로 배열을 저장하면 top값이 k보다 크다면 아래 데이터는 무조건 k보다 큰 값을 가지게 된는 것을 알 수 있다.
따라서 c++ STL에 구현되어 있는 priority_queue를 사용하여 최소힙으로 데이터를 저장하였다.
// priority_queue는 최대힙으로 구현되어 있기 때문에
//compare인자로 greater를 넘겨주어 최소힙으로 사용할 수 있다.
priority_queue<int, vector<int>, greater<int>> pq;
top 값을 최소로 만들어 주었으니 이 값이 만약 k보다 작으면서 priority_queue의 size가 1이라면 sweetness를 더 이상 올릴 수 없으므로 while문을 탈출하고 '-1'를 return하였다.
top 값이 k보다 작긴 하지만 아직 sweetness를 조합할 수 있다면(size >= 2), 조합하는 횟수(cnt)를 증가시키고 sweetness를 조합한 데이터를 다시 priority_queue에 넣어 주었다.
top 값이 k보다 크거나 같으면 조합 횟수를 return 한다.
전체적인 코드는 다음과 같다.
int cookies(int k, vector<int> A) {
int cnt = 0, temp1, temp2;
priority_queue<int, vector<int>, greater<int>> pq;
for(int i=0; i<A.size(); i++)
pq.push(A[i]);
while(true){
if(pq.top() < k){
if(pq.size() == 1) break;
cnt++;
temp1 = pq.top(); pq.pop();
temp2 = pq.top(); pq.pop();
pq.push(temp1+temp2*2);
}
else return cnt;
}
return -1;
}
모든 예시를 맞춘 모습을 볼 수 있다.
'2021 SISS 21기 활동 > 2학기 C' 카테고리의 다른 글
[HackerRank] Closet Numbers (0) | 2021.09.24 |
---|---|
[HackerRank] Equal Stacks (0) | 2021.09.24 |
[HackerRank] Jim and the Orders (0) | 2021.09.17 |
[HackerRank] Permuting Two Arrays (0) | 2021.09.17 |
[HackerRank] Mark and Toys (0) | 2021.09.12 |