반응형
먼저 이차원 벡터안에 각 원소들의 숫자의 개수들을 집어넣고 각 벡터의 사이즈만큼 sort 한 후
map 자료구조를 통해 없는 원소들을 추가해주는 식으로 진행했다.
로직은 쉬워서 문자열로 제공되는 저 숫자들을 어떻게 빼내야 할지가 관건인 문제인거 같기도하다.
내가 푼 방식은 substr 함수와 find 함수를 익힐겸 해봤는데 이 방식 말고 다른 방식을 쓰는것을 추천한다
예를 들어, 방식은 여러가지가 있겠지만 가장 간단한 방법은 문자열을 차례대로 살펴보면서 그냥 숫자만 보면된다.
',' , '{', '}' 이러한 문자를 만났을 때는 그냥 else로 다 처리하란말이다.
string s= "";
숫자야? 응 s += 숫자1
숫자야? 응 s += 숫자2
숫자야? 아니 s == "숫자1숫자2" 이 값을 정수형으로 바꿔서 이 값의 인덱스에 해당하는 배열에 카운팅을 해준다.
즉, 튜플의 원소의 숫자가 아무리 뒤바껴서 나와도 제일 많이 나온 숫자가 반환할 때 가장 앞에 위치할 값이라는 것이다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
vector <vector<int>> v;
bool cmp(vector <int> v1, vector<int> v2) {
return v1.size() < v2.size();
}
vector<int> solution(string s) {
vector<int> answer;
int check = 0;
s = s.substr(1, s.size() - 2);
while (1) {
vector <int> st;
int a = s.find('{');
int b = s.find('}');
string s1 = s.substr(a + 1, b - a - 1);
int pos;
int cnt = 0;
while ((pos = s1.find(',')) != string::npos) {
string s2 = s1.substr(0, pos);
st.push_back(stoi(s2));
s1 = s1.substr(pos + 1);
}
st.push_back(stoi(s1));
v.push_back(st);
if (b == s.size() - 1)break;
s = s.substr(b + 1);
}
sort(v.begin(), v.end(),cmp);
map <int, int> m;
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[i].size(); j++) {
if (m[v[i][j]])continue;
else {
m[v[i][j]]++;
answer.push_back(v[i][j]);
}
}
}
return answer;
}
코딩테스트 연습 - 튜플
"{{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] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]
programmers.co.kr
반응형
'프로그래머스 > Level_2' 카테고리의 다른 글
[Level_2 / C++ / 카카오] 프렌즈4블록 (0) | 2022.01.20 |
---|---|
[Level_2 / C++ / 카카오] 수식 최대화 (0) | 2022.01.20 |
[Level 2] 가장 큰 수 (C++) (0) | 2022.01.17 |
[Level_2] 더 맵게 (C++) (0) | 2022.01.17 |
[Level_2] 멀쩡한 사각형 (C++) (0) | 2022.01.17 |
댓글