https://school.programmers.co.kr/learn/courses/30/lessons/64065
λ¬Έμ μ€λͺ
μ μμλ μλμ μμμλ μ΄κ±° λλ μ΄λ€ μμλ₯Ό λ°λ₯΄λ μμλ€μ λͺ¨μμ νν(tuple)μ΄λΌκ³ ν©λλ€. nκ°μ μμλ₯Ό κ°μ§ ννμ n-νν(n-tuple)μ΄λΌκ³ νλ©°, λ€μκ³Ό κ°μ΄ ννν μ μμ΅λλ€.
- (a1, a2, a3, ..., an)
ννμ λ€μκ³Ό κ°μ μ±μ§μ κ°μ§κ³ μμ΅λλ€.
- μ€λ³΅λ μμκ° μμ μ μμ΅λλ€. ex : (2, 3, 1, 2)
- μμμ μ ν΄μ§ μμκ° μμΌλ©°, μμμ μμκ° λ€λ₯΄λ©΄ μλ‘ λ€λ₯Έ ννμ λλ€. ex : (1, 2, 3) ≠ (1, 3, 2)
- ννμ μμ κ°μλ μ νν©λλ€.
μμμ κ°μκ° nκ°μ΄κ³ , μ€λ³΅λλ μμκ° μλ νν (a1, a2, a3, ..., an)μ΄ μ£Όμ΄μ§ λ(λ¨, a1, a2, ..., anμ μμ°μ), μ΄λ λ€μκ³Ό κ°μ΄ μ§ν© κΈ°νΈ '{', '}'λ₯Ό μ΄μ©ν΄ ννν μ μμ΅λλ€.
- {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
μλ₯Ό λ€μ΄ ννμ΄ (2, 1, 3, 4)μΈ κ²½μ° μ΄λ
- {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
μ κ°μ΄ ννν μ μμ΅λλ€. μ΄λ, μ§ν©μ μμμ μμκ° λ°λμ΄λ μκ΄μμΌλ―λ‘
- {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
- {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
- {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
λ λͺ¨λ κ°μ νν (2, 1, 3, 4)λ₯Ό λνλ λλ€.
νΉμ ννμ νννλ μ§ν©μ΄ λ΄κΈ΄ λ¬Έμμ΄ sκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, sκ° νννλ ννμ λ°°μ΄μ λ΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
[μ νμ¬ν]
- sμ κΈΈμ΄λ 5 μ΄μ 1,000,000 μ΄νμ λλ€.
- sλ μ«μμ '{', '}', ',' λ‘λ§ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
- μ«μκ° 0μΌλ‘ μμνλ κ²½μ°λ μμ΅λλ€.
- sλ νμ μ€λ³΅λλ μμκ° μλ ννμ μ¬λ°λ₯΄κ² νννκ³ μμ΅λλ€.
- sκ° νννλ ννμ μμλ 1 μ΄μ 100,000 μ΄νμΈ μμ°μμ λλ€.
- return νλ λ°°μ΄μ κΈΈμ΄κ° 1 μ΄μ 500 μ΄νμΈ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λλ€.
λ΄ νμ΄
μλ μ νλ‘κ·Έλλ¨Έμ€ unordered_set μ΄μνκ² μλνλμ§ λͺ¨λ₯΄κ² λ€
μλ unordered_setλ μ λ ₯ν μμ μμ 보μ₯λλκ±° μλμλ…? λΉμ₯¬μΌ μ€νλμ€μμλ λλλ° νλ‘λλ¨Έμ€μμ μλλ μ΄μ λ₯Ό μκ³ μΆλ€,,,
κ²°κ΅ unordered_setμ μ€λ³΅μ²΄ν¬μ©μΌλ‘λ§ μ°κ³ λ€λ₯Έ λ°©μμΌλ‘ νμλ€.
νλ‘κ·Έλλ¨Έμ€μμ unordered_setμ΄ μ λλ‘ λμ μλλ μ΄μ λ₯Ό μκ³ μΆλ€…
첫λ²μ§Έ νμ΄
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_set>
#include <iostream>
using namespace std;
bool comp(const vector<int>& v1, const vector<int>& v2)
{
return (v1.size() < v2.size());
}
vector<int> solution(string s) {
vector<int> answer;
vector<vector<int>> tuple_arr;
unordered_set<int> result;
// sλ₯Ό μ΄μ€λ²‘ν°λ‘ νν
for (int i = 1; i < s.size(); ++i)
{
if (s[i] == '{')
{
vector<int> arr;
string str;
while (true)
{
++i;
if (s[i] == '}' || s[i] == ',')
{
int num = stoi(str);
arr.emplace_back(num);
str.clear();
if (s[i] == '}')
break;
else
continue;
}
str += s[i];
}
tuple_arr.emplace_back(arr);
}
}
// λ°°μ΄ μμ κΈΈμ΄λ‘ μ λ ¬
sort(tuple_arr.begin(), tuple_arr.end(), comp);
// unordered_setμ λ΄μμ ννμ λ§λ λ€.
for (const auto& arr : tuple_arr)
{
for (const auto& i : arr)
{
result.insert(i);
}
}
// set->arr
for (const auto& i : result)
{
answer.emplace_back(i);
}
return answer;
}
λλ²μ§Έ νμ΄
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_set>
#include <iostream>
using namespace std;
bool comp(const vector<int>& v1, const vector<int>& v2)
{
return (v1.size() < v2.size());
}
vector<int> solution(string s) {
vector<int> answer;
vector<vector<int>> tuple_arr;
unordered_set<int> result;
// sλ₯Ό μ΄μ€λ²‘ν°λ‘ νν
for (int i = 1; i < s.size(); ++i)
{
if (s[i] == '{')
{
vector<int> arr;
string str;
while (true)
{
++i;
if (s[i] == '}' || s[i] == ',')
{
int num = stoi(str);
arr.emplace_back(num);
str.clear();
if (s[i] == '}')
break;
else
continue;
}
str += s[i];
}
tuple_arr.emplace_back(arr);
}
}
// λ°°μ΄ μμ κΈΈμ΄λ‘ μ λ ¬
sort(tuple_arr.begin(), tuple_arr.end(), comp);
// μ€λ³΅μ²΄ν¬ν λ€ λ°°μ΄μ λ΄μμ ννμ λ§λ λ€.
for (const auto& arr : tuple_arr)
{
for (const auto& i : arr)
{
if(result.find(i) == result.end())
answer.emplace_back(i);
result.insert(i);
}
}
return answer;
}
'π₯οΈ Study Note > Coding Test' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€]level.3 -νλ Έμ΄μ ν(C++) (2) | 2023.07.22 |
---|---|
[νλ‘κ·Έλλ¨Έμ€]level.2 - μΊμ(C++) (0) | 2023.07.20 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - μ μ°κΈ°(C++) (0) | 2023.07.17 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - 124 λλΌμ μ«μ(C++) (0) | 2023.07.14 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - κ΄νΈ νμ νκΈ°(C++) (0) | 2023.07.12 |