https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
사실 문제 보면서 의문이었던게
"설명에서 어느 부분이 결과물의 순서를 명시하는거지????"
순서를 어떻게 하라는 말이 없는데 결과물의 순서는 있길래 좀 당황스러웠다.
해답은 많이 나온 요소의 순서대로 vector에 입력하는 것이었다.
<< 코드 >>
#include <string>
#include <vector>
#include <unordered_map>
#include <queue>
using namespace std;
vector<int> solution(string s) {
// map을 통해 어떤 숫자가 몇번 나왔는지를 기록
unordered_map<int,int> um;
string temp = "";
for(int i=0; i < s.size(); i++){
if(s[i] == '{'){
continue;
}
if(s[i] == ',' || s[i] == '}'){ // 쉼표나 괄호 닫기가 나온 경우 문자를 넣어줌
if(temp.size() != 0){
int num = stoi(temp);
um[num] += 1;
temp = "";
}
}
else{
temp += s[i];
}
}
priority_queue<pair<int,int>> pq;
for(auto& n : um){
pair<int,int> p(n.second, n.first);
pq.push(p);
}
vector<int> answer;
while(!pq.empty()){
pair<int,int> p = pq.top();
answer.push_back(p.second);
pq.pop();
}
return answer;
}
map에 <input, 등장횟수> 를 저장한다.
등장횟수에 따라 vector에 입력해주면 되기 때문에,
pair를 역으로 <등장횟수, input>으로 작성해 pq에 넣어 순서대로 빼내어 vector에 넣는 방법을 사용했다.
<< 깃헙 >>
[Level1.] 둘만의 암호 C++ (0) | 2024.03.01 |
---|---|
[Level2.] 호텔 대실 C++ (0) | 2024.03.01 |
[Level2.] 숫자 변환하기 C++ (0) | 2024.02.18 |
[Level1.] 예산 C++ (0) | 2024.02.15 |
[Level2.] 광물 캐기 C++ (0) | 2024.02.05 |
댓글 영역