Problem SolvingAug 28, 2025

[프로그래머스] 70130 스타 수열 (C/C++)

[프로그래머스] 70130 스타 수열 (C/C++)

문제

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;
}

Share this post

N