Problem SolvingAug 28, 2025
[프로그래머스] 70130 스타 수열 (C/C++)
![[프로그래머스] 70130 스타 수열 (C/C++)](/assets/posts/01k3qw4ac0z86j9mv2gckafcjd/index.png)
문제
https://school.programmers.co.kr/learn/courses/30/lessons/70130
풀이
소스 코드
C++17
#include <bits/stdc++.h>
std::vector<std::pair<int, size_t>> parse(const std::vector<int> &sequence) {
std::unordered_map<int, size_t> unordered_map;
for (const int number: sequence) {
unordered_map[number]++;
}
std::vector<std::pair<int, size_t>> ret(unordered_map.begin(), unordered_map.end());
auto compare = [&] (const std::pair<int, size_t> &lhs, const std::pair<int, size_t> &rhs) {
return lhs.second > rhs.second;
};
std::sort(ret.begin(), ret.end(), compare);
return ret;
}
int solution(std::vector<int> sequence) {
int answer = 0;
const auto &sorted = parse(sequence);
for (const auto &[ target, count ]: sorted) {
if (count * 2 <= answer) {
break;
}
std::stack<int> stack;
for (const int number: sequence) {
if (
(stack.size() % 2 == 0) ||
(number == target && stack.top() != target) ||
(number != target && stack.top() == target)
) {
stack.push(number);
}
}
answer = std::max((size_t) answer, stack.size() / 2 * 2);
}
return answer;
}