Coding Test Study - 16주차

Checking·2021년 8월 2일
0

Coding Test Study

목록 보기
18/22

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

여행경로

1차 시도

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

using namespace std;

vector<string> BFS(unordered_map<string, unordered_multiset<string>> ticket_field, string prev_airport, string now_airport) {
    if (prev_airport.size()) {
        ticket_field[prev_airport].erase(ticket_field[prev_airport].find(now_airport));
    }

    vector<string> optimal_route;

    for (string next_airport:ticket_field[now_airport]) {
        vector<string> route = BFS(ticket_field, now_airport, next_airport);

        if (optimal_route.size() < route.size()) optimal_route = route;
        else if (optimal_route.size() == route.size()) {

            for (int i=0; i<optimal_route.size(); i++) {
                if (optimal_route[i] != route[i]) {
                    if (optimal_route[i] > route[i]) optimal_route = route;

                    break;
                }
            }
        }
    }

    optimal_route.insert(optimal_route.begin(), now_airport);

    return optimal_route;
}

vector<string> solution(vector<vector<string>> tickets) {
    unordered_map<string, unordered_multiset<string>> ticket_field;

    for (int i=0; i<tickets.size(); i++) {
        ticket_field[tickets[i][0]].insert(tickets[i][1]);
    }

    return BFS(ticket_field, "", "ICN");
}
정확성  테스트
  테스트 1 〉	통과 (297.06ms, 3.95MB)
  테스트 2 〉	통과 (0.02ms, 3.93MB)
  테스트 3 〉	통과 (0.02ms, 3.96MB)
  테스트 4 〉	통과 (0.02ms, 3.97MB)

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

이분탐색

입국심사

1차 시도

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

using namespace std;

long long solution(int n, vector<int> times) {
    sort(times.begin(), times.end());
    
    long long left = 1, right = (long long)n * (long long)times.back(), mid = (left + right)>>1;
    
    while (left < right) {
        long long check_people = 0;
        bool isMultiple = false;
        
        for (int t:times) {
            check_people += mid / t;
            
            if (mid % t == 0) isMultiple = true;
            
            if (check_people > n) break;
        }
        
        if (check_people > n) {
            right = mid;
        } else if (check_people < n) {
            left = mid + 1;
        } else if (!isMultiple) {
            left--;
            right--;
        } else break;
        
        mid = (left + right)>>1;
    }
    
    return mid;
}
정확성  테스트
  테스트 1 〉	통과 (0.01ms, 3.97MB)
  테스트 2 〉	통과 (0.02ms, 3.89MB)
  테스트 3 〉	통과 (343.67ms, 3.94MB)
  테스트 4 〉	통과 (338.15ms, 6.8MB)
  테스트 5 〉	통과 (200.64ms, 6.88MB)
  테스트 6 〉	통과 (30.10ms, 6.54MB)
  테스트 7 〉	통과 (518.44ms, 6.74MB)
  테스트 8 〉	통과 (2854.43ms, 6.86MB)
  테스트 9 〉	통과 (0.01ms, 3.95MB)

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

0개의 댓글