programmers 튜플 : programmers.co.kr/learn/courses/30/lessons/64065#qna
코딩테스트 연습 - 튜플
"{{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
2019 카카오 개발자 겨울 인턴십에 출제된 튜플 문제입니다.
솔직히 문제를 어떻게 푸는건지 이해가 되지 않아서,, 접근 방법을 따로 검색해보았습니다.
주어진 문자열 내부의 집합을 원소의 갯수 기준으로 정렬한 후에,
각 집합의 원소에 접근하여 처음 나온 원소이면 기존 튜플의 순서가 되는 것입니다.
문제가 이해가 안되서 좀 당황스러운데,.. 왠지 이런 문제가 나오면 못풀것만 같은 느낌..
접근방법을 알고 코드만 작성해보았습니다.
파이썬같은 스플릿이나 문자열 처리하는 방법을 따로 공부하지 않아서
직접 원소의 갯수를 파악하고 정렬한 후 set을 이용하여 처리하였습니다.
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
vector<pair<string,int> > v;
set<int> visit;
bool cmp(pair<string,int>& a, pair<string,int>& b){
return a.second < b.second;
}
vector<int> solution(string s) {
vector<int> answer;
for(int i = 2; i<s.size()-1; i++){
string str = "";
str += s[i];
int cnt = 0;
while(s[i+1] != '}'){
str += s[++i];
if(s[i] == ',') cnt++;
}
i += 3;
v.push_back({str, cnt});
}
sort(v.begin(), v.end(), cmp);
for(int i = 0; i<v.size(); i++){
string str = v[i].first;
for(int j = 0; j<str.size(); j++){
int num = str[j]-'0';
while(j+1<str.size() && str[j+1] != ','){
num = num*10 + (str[++j]-'0');
}
j++;
if(visit.find(num) == visit.end()){
visit.insert(num);
answer.push_back(num);
}
}
}
return answer;
}
'algorithm > programmers' 카테고리의 다른 글
programmers 징검다리 건너기 (0) | 2020.12.13 |
---|---|
Programmers 불량 사용자 (0) | 2020.12.12 |
programmers 길 찾기 게임 (0) | 2020.12.11 |
programmers 오픈채팅방 (0) | 2020.12.10 |
Programmers 실패율 (0) | 2020.12.10 |