ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)

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

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

๋ฌธ์ œ ์„ค๋ช…

๋‘ ๊ฐœ์˜ ๋‹จ์–ด begin, target๊ณผ ๋‹จ์–ด์˜ ์ง‘ํ•ฉ words๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ์ด์šฉํ•˜์—ฌ begin์—์„œ target์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ณ€ํ™˜ ๊ณผ์ •์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. words์— ์žˆ๋Š” ๋‹จ์–ด๋กœ๋งŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด begin์ด "hit", target๊ฐ€ "cog", words๊ฐ€ ["hot","dot","dog","lot","log","cog"]๋ผ๋ฉด "hit" -> "hot" -> "dot" -> "dog" -> "cog"์™€ ๊ฐ™์ด 4๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐœ์˜ ๋‹จ์–ด begin, target๊ณผ ๋‹จ์–ด์˜ ์ง‘ํ•ฉ words๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œ ๋ช‡ ๋‹จ๊ณ„์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ begin์„ target์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๊ฐ ๋‹จ์–ด๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” 3 ์ด์ƒ 10 ์ดํ•˜์ด๋ฉฐ ๋ชจ๋“  ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • words์—๋Š” 3๊ฐœ ์ด์ƒ 50๊ฐœ ์ดํ•˜์˜ ๋‹จ์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ ์ค‘๋ณต๋˜๋Š” ๋‹จ์–ด๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • begin๊ณผ target์€ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

begin target  words  return
"hit" "cog" ["hot", "dot", "dog", "lot", "log", "cog"] 4
"hit" "cog" ["hot", "dot", "dog", "lot", "log"] 0

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

์˜ˆ์ œ #1

๋ฌธ์ œ์— ๋‚˜์˜จ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

target์ธ "cog"๋Š” words ์•ˆ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ํ•ด๋‹ต

#include <string>
#include <vector>
#include <queue>

using namespace std;

int answer = 0;
vector<bool> checked(50, false);

void DFS(int count, const string& cur, const string& target, const vector<string>& words)
{
    for(int i= 0; i< words.size(); ++i)
    {
        int diffCount = 0;
        
        // words๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์€ ๊ณณ ์ค‘
        for(int j = 0; j < words[i].size(); ++j)
        {
            if(cur[j] != words[i][j])
            {
               if(!checked[i])
                   ++diffCount;
            }
        }
        
        // cur๊ณผ ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ 1๊ฐœ ์กด์žฌํ•œ๋‹ค๋ฉด (ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ฌธ์ž๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)
        if(1 == diffCount)
        {
            // ํƒ€๊ฒŸ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™๋‹ค๋ฉด ์ข…๋ฃŒ
            if(words[i] == target)
            {
                answer = count+1;
                return;
            }
            
            // ํƒ€๊ฒŸ ๋ฌธ์ž์—ด๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด words[i] ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ ๋’ค
            // ํ˜„์žฌ ๋ฌธ์ž์—ด์„ words[i]๋กœ ์„ค์ •ํ•ด ๊ณ„์† ํƒ์ƒ‰
            else
            {
                checked[i] = true;
                DFS(count+1, words[i], target, words);
            }
        }
        
        // cur๊ณผ ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ 1๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ณ„์† ํƒ์ƒ‰ํ•œ๋‹ค.
    }
}

int solution(string begin, string target, vector<string> words) {
    DFS(0, begin, target, words);
    return answer;
}

์ฒ˜์Œ์—๋Š” ์™œ ์ด ๋ฌธ์ œ๊ฐ€ DFS๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ธ์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ์ž๊พธ 1~3๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ํ‹€๋ ธ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ๋ณด๋‹ˆ, words์— ์žˆ๋Š” ๋ฌธ์ž์—ด ์ˆœ์„œ๋Œ€๋กœ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ์—ˆ๋‹ค!!

2. words์— ์žˆ๋Š” ๋‹จ์–ด๋กœ๋งŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, words์— ์žˆ๋Š” ๋ฌธ์ž์—ด ์ค‘์— ํ˜„์žฌ ๋ฌธ์ž์—ด๊ณผ 1๊ฐœ๋งŒ ๋‹ค๋ฅด๋ฉด์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์„ ๋ฐฉ๋ฌธ, ๋ฐฉ๋ฌธ, ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋นจ๋ฆฌ ๋ชฉํ‘œ ๋ฌธ์ž์—ด์—๋งŒ ๋„๋‹ฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค!

๊ฒฐ๊ตญ DFS๋ฅผ ์ด์šฉํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋นจ๋ฆฌ Target๊ณผ ๊ฐ™์€ ๋ฌธ์ž์— ๋„์ฐฉํ•˜๋Š” ๋‹จ๊ณ„์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

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

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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์•„์ดํ…œ ์ค๊ธฐ(C++)  (0) 2023.04.17
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)  (0) 2023.04.14
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)  (0) 2023.04.11
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(C++)  (0) 2023.04.10
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํƒ€๊ฒŸ ๋„˜๋ฒ„(C++)  (0) 2023.04.07
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์•„์ดํ…œ ์ค๊ธฐ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋„คํŠธ์›Œํฌ(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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

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

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

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

    • ์ตœ๊ทผ ๊ธ€

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

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