programmers
level2 튜플
문제 설명
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
vector<int> solution(string s) {
vector<int> answer, temp;
vector<pair<int,int>> conclusion;
string str_nums, str_seg;
int max=0;
for(int i = 0; i< s.size(); i++){
if(s[i]!='{' && s[i]!='}') str_nums+=s[i];
}
istringstream iss(str_nums);
while(getline(iss, str_seg, ',')){
temp.push_back(stoi(str_seg));
if(temp.back()>max) max = temp.back();
}
conclusion.resize(max+1, {0,0});
for(int i : temp){
conclusion[i].first++;
conclusion[i].second = i;
}
sort(conclusion.rbegin(), conclusion.rend());
for(pair<int,int> i : conclusion) if(i.first!=0){answer.push_back(i.second);}
return answer;
}해결 과정
문제 자체는 간단했는 데, 문자열을 int형으로 변환하는 것이 더 어려웠던 것 같다. 다른 사람의 풀이를 보니 문자열을 차례대로 탐색하면서 숫자면 임시 문자열에 추가하고 숫자가 아닌 경우에 임시 문자열을 stoi를 통해 int형으로 변환하여 vector에 넣어주는 방법을 알게되었다.
해당 방법이 더욱 좋은 방법인 것 같아 밑에 활용해서 코드를 수정해보겠다.
튜플을 생성하는 과정은 비교적 간단한 데, 여러 번 나온 숫자를 앞에 위치시키면 정답이다.
예를 들어 4가지 숫자를 가진 튜플에서 첫 번째 항은 총 4번 부분집합으로 등장하며 두 번째 항은 총 3번, 세 번째 항은 2번, 네 번째 항은 1번 등장한다.
이를 등장횟수와 숫자를 pair로 vector에 추가하여 내림차순으로 정렬한 뒤에 숫자를 결과 vector에 추가해주는 방법으로 해결할 수 있었다.
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
vector<int> solution(string s) {
vector<int> answer, temp;
vector<pair<int,int>> conclusion;
string str_num, str_seg;
int max=0;
for(char i : s){
if(i-'0'>=0 && i-'0'<=9) str_num+=i;
else{
if(str_num.size()){
temp.push_back(stoi(str_num));
if(temp.back()>max) max = temp.back();
}
str_num.clear();
}
}
conclusion.resize(max+1, {0,0});
for(int i : temp){
conclusion[i].first++;
conclusion[i].second = i;
}
sort(conclusion.rbegin(), conclusion.rend());
for(pair<int,int> i : conclusion) if(i.first!=0){answer.push_back(i.second);}
return answer;
}'baekjoon, programmers' 카테고리의 다른 글
| programmers 프로세스 (0) | 2024.07.26 |
|---|---|
| programmers 기능 개발 (0) | 2024.07.25 |
| programmers 캐시 (0) | 2024.07.25 |
