https://programmers.co.kr/learn/courses/30/lessons/64065
풀이법
1) 문자열을 활용한 정렬과 구현 문제이다.
2) 2차원 정수형 배열을 만들고 { } 사이에 있는 값들을 다 일일이 넣어주었다. 이때 가장 바깥쪽 대괄호는 생략하였다.
if(s[i]=='{')
{
s1="";
check=true;
}
else if(s[i]=='}'){
temp[j].push_back(stoi(s1));
j++;
check=false;
}
else if(s[i]==',' && check==true)
{
temp[j].push_back(stoi(s1));
s1="";
}
else if(check==true && s[i]!=',')
{
s1+=s[i];
}
각각의 경우의 수를 코딩해 주었으며, 쉼표나 대괄호가 닫히는 경우 지금껏 받았던 문자열을 stoi함수를 사용하여 2차원 배열인 temp에 넣어주었다. 대괄호가 닫히는 경우 2차원 배열 temp[j][x] 의 j index를 증가시켜주었다.
3) 이후 sort 함수를 이용하여 들어간 2차원 배열 안에서 1차원 배열의 크기로 오름차순 정렬을 시켜 주었다.
(가장 짧은 1차원 배열이 2차원 배열의 0 번 index에 존재하도록 코딩하였다.)
4) 이후 visited 라는 bool 배열을 활용하여, 2차원 배열을 탐색했으며 visited 배열에 담겨있지 않은 새로운 값이 나오는 경우 최종 결과 값인 answer 배열에 추가 시켜 주었다.
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
bool visited[100001];
bool compare(vector<int> a, vector<int> b)
{
if(a.size()<b.size())
return true;
else
return false;
}
vector<int> solution(string s) {
vector<int> answer;
vector<vector<int>> temp(501);
string s1="";
int j=0;
bool check=false;
for(int i=1; i<s.size()-1;i++)
{
if(s[i]=='{')
{
s1="";
check=true;
}
else if(s[i]=='}'){
temp[j].push_back(stoi(s1));
j++;
check=false;
}
else if(s[i]==',' && check==true)
{
temp[j].push_back(stoi(s1));
s1="";
}
else if(check==true && s[i]!=',')
{
s1+=s[i];
}
}
sort(temp.begin(),temp.end(),compare);
for(int i=0; i<temp.size();i++)
{
for(int j=0; j<temp[i].size();j++)
{
if(!visited[temp[i][j]])
{
visited[temp[i][j]]=true;
answer.push_back(temp[i][j]);
}
}
}
return answer;
}
'Coding_Test_C++' 카테고리의 다른 글
Programmers Level 2: 큰 수 만들기(C++) (0) | 2021.10.07 |
---|---|
BaekJoon 2140번: 지뢰찾기(C++) (0) | 2021.10.05 |
BaekJoon 1946번: 신입 사원(C++) (0) | 2021.09.30 |
BaekJoon 1474번: 밑 줄(C++) (0) | 2021.09.25 |
BaekJoon 16928번: 뱀과 사다리 게임(C++) (0) | 2021.09.25 |