문제 설명 |
본 문제는 프로그래머스의 튜플 문제입니다.
해결 과정 |
튜플의 원소들에게는 정해진 순서가 있기에 원소들을 보면 자신보다 작은 집합에서 한 가지의 요소만
더 더해진 형태로 있습니다. 이 점을 이용해 작은 집합부터 체크를 해서 중복된 요소를 배제하겠습니다.
우선 주워진 문자열에서 각 집합별로 뽑아내 배열에 저장합니다. 각 집합별로 뽑아내며 이때 나오는
모든 원소들을 중복을 가리기 위한 배열에 다음과 같은 {원소, 0} pair의 형태로 저장합니다.
이후 각 집합의 길이 별로 정렬을 합니다. 이후 집합의 요소들을 불러들여 중복을 체크하고
중복 되지 않았다면 반환배열에 저장하고 중복확인배열의 본인 인덱스 값 0을 1로 바꿉니다.
이 과정을 마친 뒤 반환배열을 반환합니다.
코드 전문 |
#include <string>
#include <vector>
#include <unordered_map>
#include <cctype>
#include <algorithm>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
vector<int> v;
vector<vector<int>> v_v;
unordered_map<int, int> overlap;
string temp_str;
for (auto ch : s)
{
if (isdigit(ch)) {temp_str+= ch;}
else
{
if(!temp_str.empty())
{
v.emplace_back(stoi(temp_str));
overlap.insert(make_pair(stoi(temp_str), 0));
temp_str.clear();
}
if (ch == '}')
{
v_v.emplace_back(v);
v.clear();
}
}
}
sort(v_v.begin(), v_v.end(), [](vector<int> a, vector<int> b) -> bool
{if(a.size() < b.size()) return true; else return false;});
for (auto v : v_v)
for (auto d : v)
{
if (overlap[d] == 0) {answer.emplace_back(d); overlap[d] = 1;}
}
return answer;
}
느낀 점 (잡설 99% , 배운점 1%(많은 편)) |
더보기
문제를 잘 확인해야겠습니다. 문제의 설명 만으로는 해석에 한계가 있으니 예를 잘 읽어 이해해야겠습니다.
본격적인 문제풀이에 앞서 어떻게 문제를 풀어나갈지 제대로 계획해두고 시작해야할 것 같습니다.
두루뭉실하게 풀어버리면 시간만 버리고 제대로 풀지 못하는 것 같습니다.
긴 글 읽어주셔서 감사합니다.
부족한 점이 있다면 부디 알려주시면 감사하겠습니다.
'알고리즘 부셔버렷 > ProblemSolving' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.06.09 |
---|---|
[프로그래머스] 프린터 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.06.09 |
[프로그래머스] 수식 최대화 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.06.07 |
[프로그래머스] [1차] 뉴스 클러스터링 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.06.06 |
[프로그래머스] 메뉴 리뉴얼 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.06.05 |
댓글