소스코드
class Solution {
public:
int lastStoneWeight(vector<int>& stones) {
if(stones.empty()) return 0;
priority_queue<int, vector<int>, less<int>> pq;
for(int i = 0; i<stones.size(); i++){
pq.push(stones[i]);
}
while(pq.size() > 1) {
int first = pq.top(); pq.pop();
int second = pq.top(); pq.pop();
if(first != second) pq.push(first-second);
}
return pq.size()==1?pq.top():0;
}
};
1. 우선순위 큐 priority queue 를 사용해서 풀었다. pq를 사용하지 않고 while문 돌 때마다 sort를 수행해도 될 것 같다.
2. pq에 내림차순으로 stones에 있는 원소들을 넣는다.
3. pq의 앞에 두 원소(가장 큰 원소 두 개)를 꺼내서 값이 서로 다르면 차를 다시 pq에 넣어주고, 같으면 무시한다.
4. while문이 끝나면 pq에는 원소가 하나 남거나 아예 남지 않게 된다. 하나 남으면 그것을 반환하고 아니면 0을 반환한다.
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][프로그래머스] 더 맵게 :: soeftware (0) | 2020.04.13 |
---|---|
[C++][백준] 11004번 K번째 수 :: soeftware (0) | 2020.04.13 |
[C++][leetcode] Diameter of Binary Tree :: seoftware (0) | 2020.04.12 |
[C++][leetcode] Min Stack :: seoftware (0) | 2020.04.12 |
[c++][leetcode] Backspace String Compare :: seoftware (0) | 2020.04.10 |
댓글