Coding Test Study - 15주차

Checking·2021년 7월 29일
0

Coding Test Study

목록 보기
17/22

깊이/너비 우선 탐색(DFS/BFS)

네트워크

1차 시도

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int n, vector<vector<int>> computers) {
    vector <int> networks;
    for (int i=0; i<n; i++) networks.push_back(i);
    
    for (int i=0; i<computers.size(); i++) {
        for (int j=i+1; j<computers.size(); j++) {
            if (computers[i][j]) {
                int base_network = networks[i];
                int replace_network = networks[j];

                for (int k=0; k<networks.size(); k++) {
                    if (networks[k] == replace_network) networks[k] = base_network;
                }
            }
        }
    }
    
    sort(networks.begin(), networks.end());
    auto iter = unique(networks.begin(), networks.end());
    networks.erase(iter, networks.end());
    
    return networks.size();
}
정확성  테스트
  테스트 1 〉	통과 (0.01ms, 3.95MB)
  테스트 2 〉	통과 (0.01ms, 3.94MB)
  테스트 3 〉	통과 (0.01ms, 3.96MB)
  테스트 4 〉	통과 (0.02ms, 3.89MB)
  테스트 5 〉	통과 (0.01ms, 3.93MB)
  테스트 6 〉	통과 (0.04ms, 3.89MB)
  테스트 7 〉	통과 (0.01ms, 3.93MB)
  테스트 8 〉	통과 (0.02ms, 3.93MB)
  테스트 9 〉	통과 (0.02ms, 3.89MB)
  테스트 10 〉	통과 (0.02ms, 3.93MB)
  테스트 11 〉	통과 (0.06ms, 4.01MB)
  테스트 12 〉	통과 (0.05ms, 3.88MB)
  테스트 13 〉	통과 (0.03ms, 3.94MB)

채점 결과
  정확성: 100.0
  합계: 100.0 / 100.0

단어 변환

1차 시도

#include <string>
#include <vector>
#include <unordered_set>

using namespace std;

int DFS(string begin, string target, vector<string> words, unordered_set<string> checked, int dipth) {
    if (words.size() < dipth) return 0;
    
    checked.insert(begin);
    
    for (int i=0; i<words.size(); i++) {
        if (checked.find(words[i]) != checked.end()) continue;
        
        int canReplace = 0;

        for (int j=0; j<begin.length(); j++) {
            if (begin[j] != words[i][j]) canReplace++;

            if (canReplace > 1) break;
        }
        
        if (canReplace == 1) {
            if (words[i] == target) return dipth;
            
            int s = DFS(words[i], target, words, checked, dipth + 1);
            if (s != 0) return s;
        }
    }

    return 0;
}

int solution(string begin, string target, vector<string> words) {
    return DFS(begin, target, words, {}, 1);
}
정확성  테스트
  테스트 1 〉	통과 (0.01ms, 3.94MB)
  테스트 2 〉	통과 (0.01ms, 3.96MB)
  테스트 3 〉	통과 (0.03ms, 3.95MB)
  테스트 4 〉	통과 (0.01ms, 3.95MB)
  테스트 5 〉	통과 (0.01ms, 3.72MB)

채점 결과
  정확성: 100.0
  합계: 100.0 / 100.0
테스트 1
  입력값 〉	"hit", "cog", ["hot", "dot", "dog", "lot", "log", "cog"]
  기댓값 〉	4
  실행 결과 〉	실행한 결괏값 5이(가) 기댓값 4와(과) 다릅니다.
테스트 2
  입력값 〉	"hit", "cog", ["hot", "dot", "dog", "lot", "log"]
  기댓값 〉	0
  실행 결과 〉	테스트를 통과하였습니다.
테스트 3
  입력값 〉	"hit", "cog", ["cog", "log", "lot", "dog", "hot"]
  기댓값 〉	4
  실행 결과 〉	테스트를 통과하였습니다.
테스트 4
  입력값 〉	"1234567000", "1234567899", ["1234567800", "1234567890", "1234567899"]
  기댓값 〉	3
  실행 결과 〉	테스트를 통과하였습니다.
테스트 5
  입력값 〉	"hit", "hot", ["hot", "dot", "dog", "lot", "log"]
  기댓값 〉	1
  실행 결과 〉	테스트를 통과하였습니다.
테스트 6
  입력값 〉	"hot", "dog", ["hot", "dog"]
  기댓값 〉	0
  실행 결과 〉	테스트를 통과하였습니다.

테스트 결과 (~˘▾˘)~
  6개 중 5개 성공

2차 시도

#include <string>
#include <vector>
#include <unordered_set>

using namespace std;

int BFS(string begin, string target, vector<string> words, unordered_set<string> checked, int dipth) {
    if (words.size() < dipth) return 0;

    int min = words.size()+1;

    checked.insert(begin);
    
    for (int i=0; i<words.size(); i++) {
        if (checked.find(words[i]) != checked.end()) continue;
        
        int canReplace = 0;

        for (int j=0; j<begin.length(); j++) {
            if (begin[j] != words[i][j]) canReplace++;

            if (canReplace > 1) break;
        }
        
        if (canReplace == 1) {
            if (words[i] == target) return dipth;

            int value = BFS(words[i], target, words, checked, dipth + 1);
            
            if (value != 0 && min > value) min = value;
        }
    }

    return (min != words.size()+1) ? min : 0;
}

int solution(string begin, string target, vector<string> words) {
    return BFS(begin, target, words, {}, 1);
}
정확성  테스트
  테스트 1 〉	통과 (0.01ms, 3.76MB)
  테스트 2 〉	통과 (0.02ms, 3.96MB)
  테스트 3 〉	통과 (0.04ms, 3.72MB)
  테스트 4 〉	통과 (0.01ms, 3.95MB)
  테스트 5 〉	통과 (0.01ms, 3.95MB)

채점 결과
  정확성: 100.0
  합계: 100.0 / 100.0
profile
(ง ᐖ)ว

0개의 댓글