코딩테스트
[level 1] 3진법 뒤집기 - 68935 풀이코드
더보기
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(int n) {
double answer = 0;
vector<int> vc;
// vc에 10진법 -> 3진법으로 계산된 값 입력
while (n > 2) {
vc.push_back(n % 3);
n = n / 3;
}
vc.push_back(n);
int i = 0;
// 문제에서 앞뒤 반전된 3진법 값을 10진법으로 요구 -> 반전을 적용하기 위해 rbegin(), rend()사용
for (auto it = vc.rbegin(); it != vc.rend(); it++) {
answer += (*it) * pow(3, i); // 결과 += 값 * 3의 i제곱근
i++;
}
return answer;
}
[level 1] 이상한 문자 만들기 - 12930 풀이코드
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string s) {
string answer = "";
vector<string> vc;
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] != ' ') {
s[i] = count % 2 == 0 ? toupper(s[i]) : tolower(s[i]);
count++;
} else {
count = 0;
}
}
return s;
}
Priority Queue(우선순위 큐)
우선순위 큐는 가장 높은 우선순위의 요소가 먼저 처리되는 큐
c++의 std::priority_queue는 내부적으로 힙(Heap) 자료구조를 사용하여 구현
기본적으로 최대 힙(Max Heap)으로 작동하며, 가장 큰 값이 맨 앞에 위치한다.
주요 메서드
- push() : 요소 삽입
- pop() : 가장 높은 우선순위 요소 제거
- top() : 가장 높은 우선순위 요소 확인
- empty() : 큐가 비어 있는지 확인
- size() : 큐의 크기 반환
최소 힙(Min Heap) 만들기
- std::greater를 사용하여 우선순위 반전이 가능하다.
- std::priority_queue<T, vector<T>, greater<T>> 형식
#include <bits/stdc++.h>
using namespace std;
int main() {
// 기본 최대 힙
priority_queue<int> maxHeap;
maxHeap.push(10);
maxHeap.push(30);
maxHeap.push(20);
cout << "Max Heap: " << endl;
while(!maxHeap.empty()) {
cout << maxHeap.top() << " "; // 출력: 30 20 10
maxHeap.pop();
}
cout << endl;
// 최소 힙
priority_queue<int, vector<int>, greater<int>> minHeap;
minHeap.push(10);
minHeap.push(30);
minHeap.push(20);
cout << "Min Heap: " << endl;
while(!minHeap.empty()) {
cout << minHeap.top() << " "; // 출력 : 10 20 30
minHeap.pop();
}
cout << endl;
}
핵심 포인트
- 우선순위 큐는 정렬이 필요할 때 자동으로 정렬 상태를 유지하므로 편리하다.
- std::greater를 활용하면 간단하게 최소 힙으로 변경 가능
- 복잡한 사용자 정의 우선순위가 필요하면 사용자 정의 비교 함수(compare)도 설정 가능
- priority_queue<int, vector<int>, compare> pq;
값에 의한 호출 vs 참조에 의한 호출(Call By Value vs Call By Reference)
https://sonsazang.tistory.com/77