*문제 출처는 프로그래머스에 있습니다.
문제 제목: 튜플 (2단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/64065
문제 설명
나의 풀이
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// pair second를 내림차순으로 정렬한다.
// first는 비교할 필요가 없는게 문제 조건에서 중복을 허용하지 않았기 때문이다.
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
return a.second > b.second;
}
vector<int> solution(string s) {
vector<int> answer;
string strl = "";
map<int, int> m;
// string 문자열에서 숫자를 추출하는 반복문이다.
for (int i = 1; i < s.size() - 1; i++) {
if (s[i] != '{' && s[i] != '}' && s[i] != ',') {
strl += s[i];
if (s[i + 1] != ',' && s[i + 1] != '}') continue;
m[stoi(strl)]++;
}
strl = "";
}
// map에서 받은 자료형을 넣어준다.
vector<pair<int, int>> vt(m.begin(), m.end());
// second기준으로 내림차순으로 정렬한다.
sort(vt.begin(), vt.end(), cmp);
// 내림차순으로 정렬된 배열의 first만 push한다.
for (pair<int, int> p : vt) {
answer.push_back(p.first);
}
return answer;
}
map에서 value를 이용해서 key값을 구하려고 하는 생각이 시간을 많이 잡아먹었다.
차라리 다른 vector 배열을 생성하여(map과 자료형이 같아야함) map의 key, value를 복사하여 넣는 것이 더 효율적이었다.
※ 알아야 할 것
vector에 pair를 붙여서 사용하면 map의 키와 값을 받을 수 있다(자료형은 통일해야한다)
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / 피로도 / C++ (0) | 2024.03.11 |
---|---|
Programmers / 분수의 덧셈 / C++ (0) | 2024.03.08 |
Programmers / 행렬의 곱셈 / C++ (0) | 2024.03.06 |
Programmers / 캐시 / C++ (0) | 2024.03.06 |
Programmers / 전화번호 목록 / C++ (0) | 2024.03.05 |