본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스, 카카오 코테] 튜플 c++ (풀이과정,코드)

by 말린밴댕이_공부 2023. 5. 13.
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

코드 및 풀이

/*
튜플

문제를 풀때 중요한 두가지
1. 문자열 처리에 대해서 조심히 처리
2. 빈도수가 높은것이 결국 맨앞이다.

2번에 대해서 고려를 한다면 vector<pair<int,int>>이런식으로 진행을 해서 하면 되지 않을까 싶다.
첫번째는 숫자, 두번째는 빈도(cnt)로 하면 될듯 싶다.
그래서 나중에 cnt를 기준으로 역순 정렬을 한다. 그리고 리턴

근데 여기서 그냥 map을 사용하면 더 편하지 않을까 싶다.

map을 하고 다음에 vector에 대해서 추가를 해 두번째 원소(.second)에 대해서 정렬을 하고
answer에 대해 push_back을 하면 끝.

*/

 

#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

bool cmp(pair<int,int>& a, pair<int,int>& b){
    return a.second > b.second;
}

vector<int> solution(string s) {
    vector<int> answer;
    int num = 0;
    map<int,int> m;
   
    for(int i = 1; i < s.length();i++){
        //숫자인 경우
        if('0'<=s[i] && s[i] <= '9'){
            int num = 0;
            //두자릿수 이상 숫자 처리
            while('0'<=s[i] && s[i] <= '9'){
                num *= 10;
                num += (s[i] - '0');
                i++;
            }
            if(m.find(num) == m.end()){
                m[num] = 1;
            }else{
                m[num]++;
            }
        }
    }
    vector<pair<int,int>> v (m.begin(),m.end());
    sort(v.begin(),v.end(),cmp);
   
    for(int i =0; i < v.size();i++){
        answer.push_back(v[i].first);
    }
    return answer;
}

 

반응형

댓글