Make Unreal REAL.
article thumbnail
Level 3. 단어 변환

 

 

전형적인 BFS 문제다.

  • 최솟값을 구해야하므로 DFS가 아닌 BFS를 사용해야 한다.

 

#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <unordered_map>

using namespace std;

bool canConvert(string& a, string& b)
{
    static const int DIFF = 1;
    int diff = 0;

    for (int i = 0; i < a.length(); ++i)
        diff += (a[i] != b[i]);

    return (diff == DIFF);
}

int solution(string begin, string target, vector<string> words)
{
    int answer = 0;
    queue<pair<int, string>> que;
    unordered_map<string, unordered_map<string, bool>> isUsed;

    que.push({0, begin});

    while (!que.empty())
    {
        int level = que.front().first;
        string s = que.front().second;
        que.pop();

        if (s == target)
            return level;

        for (string& word : words)
        {
            if (!isUsed[s][word] && canConvert(s, word))
            {
                isUsed[s][word] = true;
                que.push({level + 1, word});
            }
        }
    }
    
    return 0;
}

 

방문 검사를 unordered_map이 아닌 1차원 vector로도 해결할 수 있었다.

 

#include <iostream>
#include <vector>
#include <queue>
#include <utility>

using namespace std;

bool canConvert(string& a, string& b)
{
    static const int DIFF = 1;
    int diff = 0;

    for (int i = 0; i < a.length(); ++i)
        diff += (a[i] != b[i]);

    return (diff == DIFF);
}

int solution(string begin, string target, vector<string> words)
{
    int answer = 0;
    queue<pair<int, string>> que;
    vector<bool> isUsed(words.size(), false);

    que.push({0, begin});

    while (!que.empty())
    {
        int level = que.front().first;
        string s = que.front().second;
        que.pop();

        if (s == target)
            return level;

        for (int i = 0; i < words.size(); ++i)
        {
            if (!isUsed[i] && canConvert(s, words[i]))
            {
                isUsed[i] = true;
                que.push({level + 1, words[i]});
            }
        }
    }
    
    return 0;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 3. 최고의 집합  (0) 2023.07.17
Level 3. 네트워크  (0) 2023.07.16
Level 3. 베스트앨범  (0) 2023.07.14
Level 3. 이중우선순위큐  (0) 2023.07.13
Level 3. 정수 삼각형  (0) 2023.07.12
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그