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<int, int>> 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<int, int>>());
// 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 타입을 설정해 주었는데요, 이 부분에 대해서는 나중에 따로 설명드리도록 하겠습니다.
728x90
'Algorithm Study > Programmers' 카테고리의 다른 글
(2022 KaKao Blind Recruitment) 신고 결과 받기 (0) | 2022.06.26 |
---|---|
(카카오 인턴십) 크레인 인형뽑기 게임 (0) | 2020.08.06 |
(카카오 인턴십) 호텔 방 배정 (0) | 2020.08.04 |
(2019 카카오 인턴십) 키패드 누르기 (0) | 2020.07.29 |
(2019 카카오 인턴십) 불량 사용자 (0) | 2020.07.23 |
댓글