[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - νŠœν”Œ(C++)

2023. 7. 18. 15:33Β·πŸ–₯️ Study Note/Coding Test

https://school.programmers.co.kr/learn/courses/30/lessons/64065

문제 μ„€λͺ…

μ…€μˆ˜μžˆλŠ” μˆ˜λŸ‰μ˜ μˆœμ„œμžˆλŠ” μ—΄κ±° λ˜λŠ” μ–΄λ–€ μˆœμ„œλ₯Ό λ”°λ₯΄λŠ” μš”μ†Œλ“€μ˜ λͺ¨μŒμ„ νŠœν”Œ(tuple)이라고 ν•©λ‹ˆλ‹€. n개의 μš”μ†Œλ₯Ό κ°€μ§„ νŠœν”Œμ„ n-νŠœν”Œ(n-tuple)이라고 ν•˜λ©°, λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • (a1, a2, a3, ..., an)

νŠœν”Œμ€ λ‹€μŒκ³Ό 같은 μ„±μ§ˆμ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

  1. μ€‘λ³΅λœ μ›μ†Œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. ex : (2, 3, 1, 2)
  2. μ›μ†Œμ— μ •ν•΄μ§„ μˆœμ„œκ°€ 있으며, μ›μ†Œμ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯Έ νŠœν”Œμž…λ‹ˆλ‹€. ex : (1, 2, 3) ≠ (1, 3, 2)
  3. νŠœν”Œμ˜ μ›μ†Œ κ°œμˆ˜λŠ” μœ ν•œν•©λ‹ˆλ‹€.

μ›μ†Œμ˜ κ°œμˆ˜κ°€ 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
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 -ν•˜λ…Έμ΄μ˜ 탑(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - μΊμ‹œ(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 점 찍기(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 124 λ‚˜λΌμ˜ 숫자(C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (141)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (135)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (6)
        • μ˜€λ‹΅λ…ΈνŠΈ (2)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
Beankong_
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - νŠœν”Œ(C++)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”