[TIL] 250901

๊น€์„ธํฌยท2025๋…„ 9์›” 1์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-09-01

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ
  • ๋ฐ๋””์ผ€์ดํ‹ฐ๋“œ์„œ๋ฒ„ - ์ฑ„ํŒ… ์ˆซ์ž ์•ผ๊ตฌ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
n๊ฐœ์˜ ์†ก์ „ํƒ‘์ด ์ „์„ ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ํ˜„์žฌ์˜ ์ „๋ ฅ๋ง ๋„คํŠธ์›Œํฌ๋ฅผ 2๊ฐœ๋กœ ๋ถ„ํ• ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ–๊ฒŒ ๋˜๋Š” ์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ๋งž์ถ”๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜ n, ๊ทธ๋ฆฌ๊ณ  ์ „์„  ์ •๋ณด wires๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ์†ก์ „ํƒ‘ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋น„์Šทํ•˜๋„๋ก ๋‘ ์ „๋ ฅ๋ง์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ, ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์†ก์ „ํƒ‘ ๊ฐœ์ˆ˜์˜ ์ฐจ์ด(์ ˆ๋Œ€๊ฐ’)๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • n์€ 2 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • wires๋Š” ๊ธธ์ด๊ฐ€ n-1์ธ ์ •์ˆ˜ํ˜• 2์ฐจ์› ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • wires์˜ ๊ฐ ์›์†Œ๋Š” [v1, v2] 2๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ „๋ ฅ๋ง์˜ v1๋ฒˆ ์†ก์ „ํƒ‘๊ณผ v2๋ฒˆ ์†ก์ „ํƒ‘์ด ์ „์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • 1 โ‰ค v1 < v2 โ‰ค n ์ž…๋‹ˆ๋‹ค.
  • ์ „๋ ฅ๋ง ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ’€์ด

DFS๋ฅผ ์ด์šฉํ•ด ํ’€์—ˆ๋‹ค. ๋Š์–ด์ง„ ๋ถ€๋ถ„์˜ ์™ผ์ชฝ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์ „์ฒด ๋…ธ๋“œ ๊ฐœ์ˆ˜์™€์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ–ˆ๋‹ค.

#include <cmath>
#include <vector>
using namespace std;

void dfs(vector<vector<int>>& wires, vector<bool>& check, int v1, int& count)
{
    for(int i=0; i<wires.size(); i++)
    {
        if(check[i]) continue;
        
        check[i] = true;
        vector<int> v = wires[i];
        if(v[0]==v1 || v[1]==v1)
        {
            int temp_v1 = v[0]==v1? v[1] : v[0];
            count++;
            dfs(wires, check, temp_v1, count);
        }  
        check[i] = false;
    }
}

int solution(int n, vector<vector<int>> wires) {
    int answer = -1;
    vector<bool> check(wires.size(), false);
    for(int i=0; i<wires.size(); i++)
    {
        vector<int> v = wires[i];
        check[i] = true;
        int temp = 1;
        dfs(wires, check, v[0], temp);
        check[i] = false;
        temp = abs(n-temp*2); 
        answer = answer<0 || answer>=temp? temp : answer;
    }
    return answer;
}

๋ฐ๋””์ผ€์ดํ‹ฐ๋“œ์„œ๋ฒ„ - ์ฑ„ํŒ… ์ˆซ์ž ์•ผ๊ตฌ

๋‚ด๋ฐฐ์บ ์—์„œ ์ œ๊ณต๋œ ๋กœ์ง์„ ์ด์šฉํ•ด ๋ฐ๋””์ผ€์ดํ‹ฐ๋“œ ์„œ๋ฒ„๋กœ ๋ฉ€ํ‹ฐ ์ฑ„ํŒ… ์ˆซ์ž ์•ผ๊ตฌ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ํ•œ ๋กœ์ง

  1. ํ™”๋ฉด์— ์ฑ„ํŒ… ์ถœ๋ ฅ ์‹œ ์ด์ „ ์‹œ๋„ ํšŸ์ˆ˜ ์ถœ๋ ฅ
    -> ์‹œ๋„ ํšŸ์ˆ˜ ๋ฌธ์ž์—ด ์ž‘์„ฑ ์‹œ์  ์กฐ์ •
  2. ์ตœ๋Œ€ ์‹œ๋„ ์นด์šดํŠธ๋ฅผ ๋„˜๊ฒจ๋„ ์ •๋‹ต์„ ์ฒดํฌ
    -> ์ตœ๋Œ€ ์นด์šดํŠธ๋ฅผ ๋„˜๊ธฐ๋ฉด OUT OF CHANCES๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๋‹ต์ด ๋งž์•„๋„ ์‹คํŒจ ์ฒ˜๋ฆฌ
  3. ๋‹ค์Œ ๊ฒŒ์ž„์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „๊นŒ์ง€ ์ด์ „ ๊ฒฐ๊ณผ๊ฐ€ ํ™”๋ฉด์— ์ถœ๋ ฅ ๋จ
    -> ๊ฒŒ์ž„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ResetGame()์—์„œ ํƒ€์ด๋จธ๋กœ 3์ดˆ ๋’ค ๋‹ค์Œ ๋ผ์šด๋“œ ์ถœ๋ ฅํ•˜๋„๋ก ๊ตฌํ˜„
  4. ResetGame() ์ค‘๋ณต ํ˜ธ์ถœ
    -> ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ฒ˜์Œ ํ˜ธ์ถœ๋˜๊ณ  ๋‹ค์Œ ๋ผ์šด๋“œ๊ฐ€ ์ถœ๋ ฅ๋˜๊ธฐ ์ „๊นŒ์ง€ ์ •๋‹ต ์ž…๋ ฅ ๋ฌด์‹œ, ResetGame() ์ค‘๋ณต ํ˜ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

๋ฉ€ํ‹ฐ์—์„œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‚˜๋ˆ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ด ์•„์ง์€ ์–ด๋ ต๋‹ค.


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ
์ถœ์ฒ˜: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

0๊ฐœ์˜ ๋Œ“๊ธ€