사실 문제 자체가 좀 이해가 안갔다. 이해하고도 이걸 풀라고...?라는 생각이 들었다. 그래서 예제보고 풀었다. 처음에 next_permutation으로 풀 수 있지 않을까 라는 생각을 했다(지금 생각하면 바보같은 생각...).
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int comp(string s1, string s2)
{
return s1.length() < s2.length();
}
vector<int> solution(string s)
{
string str = s.substr(1, s.length() - 2); // {{4,2,3},{3},{2,3,4,1},{2,3}} -> {4,2,3},{3},{2,3,4,1},{2,3}
int start = 0;
int length = 1;
string temp = ",";
vector<string> vec;
for (int i = 0; i < str.length(); i++)
{
if (str[i] == '}')
{
vec.push_back(temp.substr(2, temp.size())); // {4,2,3 -> 4,2,3
temp = "";
length = 1;
start = i + 1;
}
else
{
temp += str[i]; // 일단 처음부터 문자를 계속 더해준다.
}
}
sort(vec.begin(), vec.end(), comp); // 문자열 길이가 짧은 순서로 정렬
vector<int> result;
for (int i = 0; i < vec.size(); i++)
{
str = vec[i];
// 4,2,3
// 3
// 2,3,4,1
// 2,3
for (int z = 0; z < str.length(); z++) //
{
if (str[z] == ',' || z == str.length() - 1) //,을 만나거나 문자열의 마지막인 경우
{
if (z == str.length() - 1) // 마지막 숫자는 무시해버리기 때문에 임의로 넣어준다
{
temp += str[z];
}
int num = stoi(temp); // 숫자로 변환
if (find(result.begin(), result.end(), num) == result.end()) // vector에 없으면 넣어준다
{
result.push_back(num);
}
temp = "";
}
else
{
temp += str[z];
}
}
}
return result;
}
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] 백준14502 - 연구소 (0) | 2020.09.02 |
---|---|
[알고리즘문제] 프로그래머스 - 스킬트리 (0) | 2020.09.01 |
[알고리즘문제] 프로그래머스 - 크레인 인형뽑기 게임 (0) | 2020.08.27 |
[알고리즘 문제] 백준2178 - 미로탐색 (0) | 2020.08.23 |
[알고리즘 문제] 백준14501 - 퇴사 (0) | 2020.08.22 |