문제
첫번째 풀이(20.12.22에 푼 풀이)
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
bool cmp(vector<string> s1, vector<string> s2)
{
return s1.size() < s2.size();
}
vector<int> solution(string s) {
string tempString;
vector<vector<string>> ans;
vector<string> temp;
for(int i = 1; i < s.size() - 1; i++)
{
if (isdigit(s[i]) != 0)
{
tempString += s[i];
if (s[i + 1] == '}')
{
temp.push_back(tempString);
ans.push_back(temp);
temp.clear();
tempString.clear();
continue;
}
if (s[i + 1] != ',')
{
continue;
}
else
{
temp.push_back(tempString);
tempString.clear();
}
}
}
sort(ans.begin(), ans.end(), cmp);
vector<int> answer;
set<string> res;
for (int i = 0; i < ans.size(); i++)
{
for (int j = 0; j < ans[i].size(); j++)
{
if (res.find(ans[i][j]) == res.end())
{
res.insert(ans[i][j]);
answer.push_back(stoi(ans[i][j]));
}
}
}
return answer;
}
첫번째 코드 결과
걸린 시간
2시간
두번째 풀이(21.05.23에 푼 풀이)
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> v(100000);
bool compare(pair<int, int> a, pair<int, int> b)
{
return a.second > b.second;
}
vector<int> solution(string s)
{
string tempString = "";
for(int i = 1; i < s.size()-1; i++)
{
if(s[i] == ',' || i == s.size() - 2)
{
v[stoi(tempString)].first = stoi(tempString);
v[stoi(tempString)].second += 1;
tempString.clear();
}
if(isdigit(s[i]) !=0)
{
tempString += s[i];
}
}
sort(v.begin(), v.end(), compare);
vector<int> answer;
for(int i = 0; i < v.size(); i++)
{
if(v[i].first == 0)
break;
answer.push_back(v[i].first);
}
return answer;
}
두번째 코드 결과
푼 시간 40분?
작년 11월 말쯤부터 코딩테스트 공부를 시작했고, 시작한지 얼마안되서 풀었던 문제이다.
약 6개월 지나서 다시 풀어보니 코드 가독성 / 효율성면에서 전체적으로 좋아진걸 느낄 수 있었다.
처음 코테 공부를 했을때에는 무조건 되는 풀이밖에 생각이 안났는데
지금은 가독성, 효율성을 고려하면서 코드를 짜는게 훈련이 많이되었다는 생각이 든다.
'개발 > 알고리즘' 카테고리의 다른 글
프로그래머스 다음 큰 숫자 C++ (0) | 2021.01.01 |
---|---|
프로그래머스 JadenCase 문자열 만들기 C++ (0) | 2020.12.23 |
프로그래머스 피보나치 수 C++ (0) | 2020.12.15 |
프로그래머스 N개의 최소공배수 (0) | 2020.12.15 |
프로그래머스 멀쩡한 사각형 C++ (0) | 2020.12.15 |