ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)

2023. 4. 14. 15:11ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

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

๋ฌธ์ œ ์„ค๋ช…

์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ์„ ๋ชจ๋‘ ์ด์šฉํ•˜์—ฌ ์—ฌํ–‰๊ฒฝ๋กœ๋ฅผ ์งœ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ "ICN" ๊ณตํ•ญ์—์„œ ์ถœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๊ณต๊ถŒ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด tickets๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฐฉ๋ฌธํ•˜๋Š” ๊ณตํ•ญ ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๋ชจ๋“  ๊ณตํ•ญ์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž 3๊ธ€์ž๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ๊ณตํ•ญ ์ˆ˜๋Š” 3๊ฐœ ์ด์ƒ 10,000๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • tickets์˜ ๊ฐ ํ–‰ [a, b]๋Š” a ๊ณตํ•ญ์—์„œ b ๊ณตํ•ญ์œผ๋กœ ๊ฐ€๋Š” ํ•ญ๊ณต๊ถŒ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ์€ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์ผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋„์‹œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

tickets  return
[["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] ["ICN", "JFK", "HND", "IAD"]
[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1

["ICN", "JFK", "HND", "IAD"] ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

["ICN", "SFO", "ATL", "ICN", "ATL", "SFO"] ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] ๊ฐ€ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์•ž์„ญ๋‹ˆ๋‹ค.

๋‚ด ํ•ด๋‹ต

#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>

using namespace std;
     
vector<string>  answer;

bool DFS(const string& cur, const vector<vector<string>>& tickets, vector<bool>& useTicket)
{
    // ๊ณตํ•ญ ๋ฐฉ๋ฌธ
    answer.push_back(cur);
    
    // ๋ชจ๋“  ํ‹ฐ๊ฒŸ ์‚ฌ์šฉ์‹œ ์ข…๋ฃŒ
    bool finish;
    for(const auto& b : useTicket)
    {
        finish = b;
        if(!finish)
            break;
    }
    if(finish)
        return true;
    
    
    // ์•ŒํŒŒ๋ฒณ์ด ์•ž์„œ๋Š” ๋‹ค์Œ ๊ณตํ•ญ์ฐพ๊ธฐ
    for(int i = 0; i < tickets.size(); ++i)
    {
        if(!useTicket[i] && tickets[i][0] == cur)
        {
            // ํ‹ฐ์ผ“ ์‚ฌ์šฉ, ๋‹ค์Œ ๊ณตํ•ญ์œผ๋กœ ์ด๋™
            useTicket[i] = true;
            
            // ๋ชจ๋“  ํ‹ฐ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์œผ๋ฉด true ๋ฐ˜ํ™˜
            if(DFS(tickets[i][1], tickets, useTicket))
                return true;
            
            // ๋ชจ๋“  ํ‹ฐ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ํ‹ฐ์ผ“ ์‚ฌ์šฉ ์ทจ์†Œ
            useTicket[i] = false;
            
        }
    }
    
    // ๋‹ค์Œ ๊ณตํ•ญ์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ํ˜„์žฌ ๊ณตํ•ญ ๋ฐฉ๋ฌธ ์ทจ์†Œ
    answer.pop_back();
    return false;
}

vector<string> solution(vector<vector<string>> tickets) 
{
    vector<bool> useTicket(tickets.size(), false);
    sort(tickets.begin(), tickets.end()); // ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์•ž์„  ๊ฒฝ๋กœ ์šฐ์„ 
    DFS("ICN", tickets, useTicket);
    
    return answer;
}

์ฒ˜์Œ์— ๊ณ„์† ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 1, 2์—์„œ ๊ณ„์† ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์—ˆ๋‹ค.

๋‹ค์Œ ๋‘ ์กฐ๊ฑด์„ ๋™์‹œ์— ๋งŒ์กฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ์€ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์ผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„  tickets๋ฅผ ์ •๋ ฌํ–ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์•ž์„  ๊ฒฝ๋กœ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹ค์Œ์œผ๋กœ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ๋‹ค์Œ ๊ณตํ•ญ์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๊ณตํ•ญ ์ด๋ฆ„์„ ๋ชฉ๋ก์—์„œ ์ œ์™ธํ•˜๊ณ  false๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ชจ๋“  ๊ณตํ•ญ์„ ๋ฐฉ๋ฌธํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ๋กœ๋Š” answer์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋„๋ก ํ–ˆ๋‹ค.

์•„์ง ์žฌ๊ท€๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์—ฐ์Šต์„ ๋งŽ์ด ํ•ด์•ผ๊ฒ ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ–ฅ๏ธ Study Note > Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ(C++)  (0) 2023.04.18
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์•„์ดํ…œ ์ค๊ธฐ(C++)  (0) 2023.04.17
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)  (0) 2023.04.13
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)  (0) 2023.04.11
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(C++)  (0) 2023.04.10
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์•„์ดํ…œ ์ค๊ธฐ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (146)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (8)
        • ์˜ค๋‹ต๋…ธํŠธ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      cpp
      unrealengine build system
      ๊ฒŒ์ž„ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      UnrealEngine5
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      ๊ทธ๋ฆฌ๋””(greedy)
      ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ
      propertyaccess
      OnlineSubsystem
      ํ—ฌํ…Œ์ด์ปค
      ๊ฒŒ์ž„ ๋ชจ์ž‘
      unrealengine module
      ํ”„๋ฃŒ๊ทธ๋ž˜๋จธ์Šค
      ๊ฒŒ์ž„ ๊ฐœ๋ฐœ
      UnrealEngine
      programmers
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
    Beankong_
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”