ํ๋์ ๋ฌธ์์ด์ ์ฝค๋ง์ ์ค๊ดํธ๋ฅผ ๊ตฌ๋ถํ์ฌ ์ซ์๋ก ์ธ์ํ ์ ์๊ณ ๋ ๊ฐ์ฅ ๊ธด ๋ฐฐ์ด์ ์์๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํด์ ์ด๋ ๊ฒ ์ ๊ทผํด์ ํ์๋ค. ํ์ง๋ง answer์ ์ ๋ ฌ ์์๋ ํด๋น ์ซ์๊ฐ ์ผ๋ง๋ ๋ฐ๋ณต๋์ด์ ๋์๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
์ด๋ Map์ ์ด์ฉํด์ value์ ๊ฐ์ ๊ณ์์ ์ผ๋ก count๋ฅผ ์์ผ์ ์ ์ฅํด์ผ ํ๋ค.
1. map<int,int> map ์ ์ ์ธํ๊ณ ์ฌ์ฉํ ๋ value๊ฐ์ด 0์ผ๋ก ์ด๊ธฐํ๊ฐ ๋๋์ง๊ฐ ๊ถ๊ธํ๋ค.
-> 0์ผ๋ก ์ด๊ธฐ๊ฐ์ด ๊ธฐ๋ณธ ์ค์ ๋์ด ์๋ค.
2. sort(map.begin(), map.end())๋ฅผ ํตํด์ value ์ ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ์ํฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋๊ฐ
-> vector<pair<int,Int>>๋ก ๋ณต์ฌํ ํ sort๊ฐ ๊ฐ๋ฅํ๋ค
ํ๊ต ๊ณผ์ ์์ ์ํํ์๋ ๋ฌธ์์ด ๊ตฌ๋ถํ๋ ๊ฒ๋ณด๋ค ๋ณต์กํ์ง ์์์ ๊ตฌ๋ถํ๋ ๊ฒ์ ๊ธ๋ฐฉ ํด๊ฒฐํ๋ค. ์์ผ๋ก๋ vector ๋ก ๋ชจ๋ ๊ฒ์ ํด๊ฒฐํ๋ ค ์๊ฐํ์ง ๋ง๊ณ , ์ค๋ณต๋๋ ๊ฒ์ ์ด๋ป๊ฒ ์ธ์ค๊น? --> map์ ์ด์ฉํด์ ํด๊ฒฐ ๋ฑ๋ฑ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ ์์ญ์ ๊ธฐ๋กํ๋ฉด์ ๊ณต๋ถํด์ผํ ๊ฒ ๊ฐ๋ค.
#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
bool cmp(const pair<int,int>& a, const pair<int,int>& b){
// ๋ ๊ฐ์ง์ pair๊ฐ ๋ค์ด์ค๋ฉด second ์ค ํฐ ๊ฒ์ ๋ฐํํ๋ค. (๋ด๋ฆผ์ฐจ์)
// ๊ฐ์ ๊ฒฝ์ฐ first ๊น์ง ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํจ์๊ฐ ๋์๊ฐ๋ค.
if(a.second == b.second) return a.first > b.first;
return a.second > b.second;
}
vector<int> solution(string s) {
vector<int> answer;
map<int,int> map;
int index = 0;
// ๋ฌธ์์ด์ ๋๋ฉด์ ๋ฒํธ๋ฅผ ์ธ์งํด์ผ ํ๋ค.
for(int i = 2 ; i < s.size() - 1 ; i++) {
// ํ์ฌ ๋ฌธ์๊ฐ ๋ค์์ด ์๋ ๊ฒฝ์ฐ ์ซ์์ด๋ฏ๋ก ์ ์ฅ์ ํด์ผ ํ๋ค.
if(s[i] != '}' && s[i] != ',' && s[i] != '{') {
// ์ซ์๊ฐ ํ ์๋ฆฌ ์ซ์ ์ธ ๊ฒฝ์ฐ
if(s[i+1] == ',' || s[i+1] == '}')
// map์ ํด๋น ์ซ์๊ฐ ๋ช ๋ฒ ๋ค์ด๊ฐ๋์ง count ํด์ค๋ค.
map[s[i] - '0']++;
// ์ซ์๊ฐ ๋ ์๋ฆฌ ์ ์ด์์ธ ๊ฒฝ์ฐ
else {
int j = i + 1;
int cut = 0;
// 2์๋ฆฌ ์ด์ ์ซ์๊ฐ ์ธ์ ๊น์ง ๋ฐ๋ณต๋๋์ง ์ธ์ค๋ค.
while(true) {
if(s[j] == ',' || s[j] == '}') {
cut = j;
break;
}
j++;
}
// ๊ทธ ๋ฌธ์์ด์ substr์ ์ด์ฉํด ์๋ผ์ค๋ค.
string number = s.substr(i, cut-i);
// map์ ๋ง์ฐฌ๊ฐ์ง๋ก stoi ํจ์๋ฅผ ์ด์ฉํด์ ์ ์ฅํ๋ค.
map[stoi(number)]++;
// ๋ฐ๋ณต๋ฌธ์ ์๋ฅธ ๋งํผ ๋ค์ ์์ํ๊ธฐ ์ํด 1๋งํผ ๋นผ์ค๋ค.
i = cut-1;
}
}
}
// map์ value ๋ก ์ ๋ ฌํ๊ธฐ ์ํด์ pair<int,int> ๋ฒกํฐ์ ๋ด์์ค๋ค.
vector<pair<int,int>> temp(map.begin(), map.end());
// cmp ํจ์๋ฅผ ํตํด์ value ๊ฐ์ผ๋ก ๋น๊ต๋ฅผ ํด์ค๋ค.
sort(temp.begin(), temp.end(), cmp);
for(auto cnt : temp)
answer.push_back(cnt.first);
return answer;
}
์ด๊ฑด ๋ฌธ์์ด์ 2์ค ๋ฐฐ์ด๋ก ๋ฝ์๋ด๊ธฐ๊น์ง ์ฑ๊ณตํ๊ณ answer๊ฐ ๋ง์ด count๋ ๊ฒ์ผ๋ก ์ ๋ ฌ๋จ์ ๋ชจ๋ฅด๊ธฐ ์ ๊น์ง์ ์์ ๊ณผ์
#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
vector<vector<int>> arr(s.size());
int index = 0;
for(int i = 2 ; i < s.size() - 1 ; i++) {
if(s[i] == '}' && ( s[i+1] == ',' || s[i+1] == '}')) {
index++;
continue;
}
if(s[i] != '}' && s[i] != ',' && s[i] != '{') {
// ์ซ์๊ฐ ํ ์๋ฆฌ ์ซ์ ์ธ ๊ฒฝ์ฐ
if(s[i+1] == ',' || s[i+1] == '}')
arr[index].push_back(s[i] - '0');
// ์ซ์๊ฐ ๋ ์๋ฆฌ ์ ์ด์์ธ ๊ฒฝ์ฐ
else {
int j = i + 1;
int cut = 0;
while(true) {
if(s[j] == ',' || s[j] == '}') {
cut = j;
break;
}
j++;
}
string number = s.substr(i, cut-i);
//cout << stoi(number) << endl;
arr[index].push_back(stoi(number));
i = cut-1;
}
}
}
int max = 0;
for(int i = 0 ; i < arr.size() ; i++) {
if(max < arr[i].size()) {
max = i;
}
}
cout << max;
for(int i = 0 ; i < arr[max].size() ; i++) {
answer.push_back(arr[max][i]);
}
return answer;
}
'๐ Self Study > ๐ Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค (ํฌ์ผ๋ชฌ, ์ฐพ์๋ผ ํ๋ก๊ทธ๋๋ฐ ๋ง์คํฐ) C++ (0) | 2022.01.02 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค (๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ, 2017 ์นด์นด์ค๋ณธ์ ์ฝ๋) C++ (0) | 2022.01.02 |
ํ๋ก๊ทธ๋๋จธ์ค (์ ๊ตญ์ฌ์ฌ, ์ด๋ถํ์) C++ (0) | 2022.01.01 |
ํ๋ก๊ทธ๋๋จธ์ค (๋ ๋งต๊ฒ, ํ(Heap)) C++ (0) | 2022.01.01 |
ํ๋ก๊ทธ๋๋จธ์ค (์์ ๋ง๋ค๊ธฐ, Summer/Winter Coding(~2018)) C++ (0) | 2021.12.30 |