2019 카카오 인턴 코테 문제
5시간을 잡고 실전처럼 진행하였으며 코드의 최적화나 알고리즘은 정확하지 않음.
코딩테스트 연습 - 튜플 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 튜플
"{{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
2단계치곤 쉬운문제였다. 약 30분정도 소요되었다.
문제의 답은 다음과 같이 구하면 된다.
원소 갯수가 1개짜리면 set에서 1번째, 2개짜리중 전체집합에 없는것이 set에서 2번째, ..... 하면 된다.
말로만봐선 이해하기 힘든데, 예시로 {a}, {b, a}, {c, b, a} 가 주어진다고 한다.
갯수가 1개짜리인 집합은 {a} 이고 이것이 전체 set에서 첫번째이므로 현재 전체 set은 {a} 이다.
다음으로 2개짜리인 집합은 {b, a} 이며, 전체 집합에 없는것은 b이다. 따라서 전체집합은 {a, b} 가 된다.
마지막으로 3개짜리인 집합은 {c, b, a}이며, 전체집합에 없는것은 c이다. 따라서 전체집합은 {a, b, c}가 된다.
따라서 우리가 할 일은, string을 갯수에 따라 집합을 나눠 parsing하는 것이 다라고 볼 수 있다.
parsing은 { 이 들어온다면 } 이 나올때 까지 동일한 집합이며, 처음과 끝의 { } 를 빼고 생각한다면 쉽다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
int cnt = 0;
for (int i = 1; i < s.size() - 1; i++)
if (s[i] == '{')
cnt++;
vector<vector<int>> set(cnt + 1);
for (int i = 1; i < s.size() - 1; i++)
{
if (s[i] == '{')
{
i++;
string num = "";
vector<int> temp;
while (i < s.size())
{
num += s[i];
i++;
if (s[i] == ',')
{
temp.push_back(stoi(num));
num = "";
i++;
}
else if (s[i] == '}')
{
temp.push_back(stoi(num));
break;
}
}
set[temp.size()] = temp;
}
}
for(int i = 1; i <= cnt; i++)
for(int j = 0; j < set[i].size(); j++)
if (find(answer.begin(), answer.end(), set[i][j]) == answer.end())
{
answer.push_back(set[i][j]);
break;
}
return answer;
}
'Coding_Test > 2019_KAKAO_INTERN' 카테고리의 다른 글
[2019 카카오 인턴] 호텔 방 배정 (C++) (0) | 2022.05.09 |
---|---|
[2019 카카오 인턴] 불량 사용자 (C++) (0) | 2022.05.09 |
[2019 카카오 인턴] 크레인 인형뽑기 게임 (C++) (0) | 2022.05.09 |