본문 바로가기

알고리즘/Kakao

[카카오 코딩 테스트] 튜플

https://tech.kakao.com/2020/04/01/2019-internship-test/

 

2019 카카오 개발자 겨울 인턴십 코딩 테스트 문제 해설

“2019년 카카오 개발자 겨울 인턴십” 공개 채용을 위한 1차 코딩 테스트가 지난 2019년 11월 9일 오후 2시부터 6시까지 총 4시간에 걸쳐 진행되었습니다. ’19년 신입공채 1차 코딩 테스트 시에 7문제가 출제되고 5시간의 풀이 시간이 주어졌던 것과는 달리 이번 인턴 코딩 테스트는 5문제가 출제되고 4시간의 풀이 시간이 주어졌습니다. 인턴의 경우 신입 공채와는 달리 인턴 과정을 통해 추가 검증을 하기 때문입니다. 이전과 동일하게 쉬운 문제를 앞쪽

tech.kakao.com

2번 튜플 문제입니다.

 

원리만 알면 쉽게 풀 수 있는 문제입니다. 

튜플들이 순서가 바뀔수 있고 집합마다 원소 순서도 다 바뀔 수 있지만, 걱정할 필요가 없습니다.

집합이 4개라면, 결국 제일 첫번째 있는 원소는 4번, 두번째 원소는 3번, 세번째는 2번, 네번째는 1번 나올 수 밖에 없습니다.

그래서 string에서 숫자를 추출해내고 각 숫자가 몇번 반복됬는지만 확인해 주어 정렬만 해준다면 쉽게 해결할 수 있는 문제입니다.

 

아래는 풀이한 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int cnt[100001= { 0 };
vector<int> solution(string s) {
    vector<int> answer;
    int num = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s[i] != '{' && s[i] != '}' && s[i] != ',') {
            num *= 10;
            num += s[i] - '0';
        }
        else {
            if (num > 0) {
                cnt[num]++;
                num = 0;
            }
        }
    }
    vector<pair<intint>> result;
    for (int i = 0; i < 100001; i++) {
        if (cnt[i] > 0) {
            result.push_back({ cnt[i],i });
        }
    }
    sort(result.begin(), result.end());
    for (int i = result.size() - 1; i >= 0; i--)
        answer.push_back(result[i].second);
    return answer;
}
int main() {
    //string s = "{{2},{2,1},{2,1,3},{2,1,3,4}}";
    //string s = "{ {1, 2, 3}, { 2,1 }, { 1,2,4,3 }, { 2 }}";
    //string s = "{{20,111},{111}}";
    //string s = "{{123}}";
    string s = "{{4,2,3},{3},{2,3,4,1},{2,3}}";
    vector<int> result = solution(s);
    for (auto x : result)
        cout << x << " ";
    system("pause");
    return 0;
}
cs

질문이나 지적사항은 댓글 부탁드립니다 :)