본문 바로가기

개발/알고리즘

프로그래머스 튜플 C++

문제

 

첫번째 풀이(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개월 지나서 다시 풀어보니 코드 가독성 / 효율성면에서 전체적으로 좋아진걸 느낄 수 있었다.

처음 코테 공부를 했을때에는 무조건 되는 풀이밖에 생각이 안났는데

지금은 가독성, 효율성을 고려하면서 코드를 짜는게 훈련이 많이되었다는 생각이 든다.