본문 바로가기
  • 소소한 개발자 이야기
Algorithm Study/Programmers

(2019 카카오 인턴십) 튜플

by Siwan_Min 2020. 7. 27.
728x90
 

코딩테스트 연습 - 튜플

"{{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

문제 해결 방안:

숫자를 받는다. 

그 숫자의 갯수를 센다. 

갯수가 많은 순서대로 출력한다. 

 

이게 핵심입니다. 

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
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
 
using namespace std;
 
vector<int> solution(string s) {
    vector<int> answer;
    int st[101010= {};
    string data = "";
    bool flag = false;
    
    for(int i = 0; i < s.size(); i++){
 
        if(s[i] >= '0' && s[i] <= '9'){
            data += s[i];
        }
        else{
            if(data.length() != 0){
                int num = atoi(data.c_str()); // 정수형으로 변환 
                st[num]++// 인덱스의 갯수를 ++ 해준다
                data = ""// 데이터 초기화 
            
            }
        }
    }
    vector<pair<intint>> v;
    for(auto i = 0; i < 101010; i++){ 
        //st[i]가 0이 아니라면 그 데이터와 인덱스를 push_back
        if(st[i]) v.push_back({st[i], i});
    }
    // 내림차순 정렬
    sort(v.begin(), v.end(), greater<pair<intint>>());
  //  reverse(v.begin(), v.end());
    for(auto it: v) answer.push_back(it.second);
    return answer;
}
 
/*
int main(){
    
    string s = "{{2},{2,1},{2,1,3},{2,1,3,4}}";
   // cin>>s;
    vector<int> t = solution(s);
    for(int i = 0; i < t.size(); i++){
        cout<<t[i]<<" ";
    }
   // {{2},{2,1},{2,1,3},{2,1,3,4}}
    return 0;
}
*/

 

너무 어렵게 생각하면 코드가 많이 복잡해 지는데요. 저 또한 처음에 복잡하게 생각해서 꽤나 문제를 푸는데 오래 걸렸습니다.

 

여러번 생각해보니 "내가 왜 이렇게 어렵게 생각했지?" 하면서 지워야 할 부분들이 보이더라구요 

 

풀고나서 끝내지 말고, 더 쉽게 풀 수 있는 방법은 없을까? 다른 사람들은 어떻게 풀었지? 하는 고민을 많이 해보시고 또

 

다른 사람이 푼 방식대로 풀어보는 것도 매우 중요한 학습인것 같습니다. 

 

auto 타입

그리고 제가 변수를 선언 할 때 auto 타입을 설정해 주었는데요, 이 부분에 대해서는 나중에 따로 설명드리도록 하겠습니다. 

728x90

댓글