-
프로그래머스 튜플 C++프로그래머스(Programmers) 2022. 1. 14. 20:25반응형
[제한사항]
- s의 길이는 5 이상 1,000,000 이하입니다.
- s는 숫자와 '{', '}', ',' 로만 이루어져 있습니다.
- 숫자가 0으로 시작하는 경우는 없습니다.
- s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있습니다.
- s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수입니다.
- return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어집니다.
[입출력 예]
s result
"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{20,111},{111}}" [111, 20] "{{123}}" [123] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] 입출력 예에 대한 설명입출력 예 #1
문제 예시와 같습니다.
입출력 예 #2
문제 예시와 같습니다.
입출력 예 #3
(111, 20)을 집합 기호를 이용해 표현하면 {{111}, {111,20}}이 되며, 이는 {{20,111},{111}}과 같습니다.
입출력 예 #4
(123)을 집합 기호를 이용해 표현하면 {{123}} 입니다.
입출력 예 #5
(3, 2, 4, 1)을 집합 기호를 이용해 표현하면 {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, 이는 {{4,2,3},{3},{2,3,4,1},{2,3}}과 같습니다.
#include <string> #include <vector> #include <map> #include <algorithm> #include <iostream> 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; map<int, int> mp; // key : 숫자, value : 호출횟수 string tmp=""; for(int i=0; i<s.length(); i++) { if(s[i] == '{' || s[i] == '}' || s[i] == ',') { if(tmp!="") { int key = stoi(tmp); mp[key]++; tmp=""; } continue; } else { tmp +=s[i]; } } cout << mp.size(); vector<pair<int, int>> mpVector; for(auto mpPair : mp) { mpVector.push_back(mpPair); } sort(mpVector.begin(), mpVector.end(),cmp); for(int i=0; i<mpVector.size(); i++) { answer.push_back(mpVector[i].first); } return answer; }
=> MAP STL을 사용하여 풀었습니다.
=> 예시를 보면 앞에 있는 숫자일수록, 호출된 횟수가 많습니다.
=> 이를 이용하여 MAP을 이용해 각 원소가 몇번 호출되었는지 세었습니다.
=> 그이후 pair<int,int>형 vector를 선언하여 map에 있는 값들을 집어넣었고, sort함수를 사용하여 원하는대로 정렬하였습니다.
=> 원하는대로 정렬하기 위해 cmp함수를 생성하여 정렬하였습니다.
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
예산 (0) 2022.01.21 신고 결과 받기 C++ (0) 2022.01.17 프로그래머스 3진법 뒤집기 C++ (0) 2022.01.13 프로그래머스 H-Index C++ (0) 2022.01.12 괄호변환 C++ (0) 2022.01.11