Coding Test Study - 14주차

Checking·2021년 7월 19일
0

Coding Test Study

목록 보기
16/22

동적계획법(Dynamic Programming)

도둑질

1차 시도

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> money) {
    vector<int> money_reverse(money.rbegin(), money.rend());
    int forward = 0, reverse = 0;

    for (int i=0; i<money.size()-1; i += 2) {
        int now_choice = money[i] - (money[(i-1+money.size())%money.size()] + money[(i+1)%money.size()]);
        int next_choice = money[i+1] - (money[i] + money[(i+2)%money.size()]);
        
        if (now_choice > next_choice) {
            if (i==0) money.back() = 0;
            forward += money[i];
        } else {
            if (i==0) money.push_back(0);
            forward += money[i+1];
            i++;
        }
    } 
    
    for (int i=0; i<money_reverse.size()-1; i += 2) {
        int now_choice = money_reverse[i] - (money_reverse[(i-1+money_reverse.size())%money_reverse.size()] + money_reverse[(i+1)%money_reverse.size()]);
        int next_choice = money_reverse[i+1] - (money_reverse[i] + money_reverse[(i+2)%money_reverse.size()]);
        
        if (now_choice > next_choice) {
            if (i==0) money_reverse.back() = 0;
            reverse += money_reverse[i];
        } else {
            if (i==0) money_reverse.push_back(0);
            reverse += money_reverse[i+1];
            i++;
        }
    } 
    
    return (forward > reverse) ? forward : reverse;
}
정확성  테스트
  테스트 1 〉	실패 (0.02ms, 3.94MB)
  테스트 2 〉	실패 (0.04ms, 3.75MB)
  테스트 3 〉	실패 (0.02ms, 3.95MB)
  테스트 4 〉	실패 (0.01ms, 3.95MB)
  테스트 5 〉	실패 (0.01ms, 3.96MB)
  테스트 6 〉	실패 (0.03ms, 3.95MB)
  테스트 7 〉	실패 (0.02ms, 3.96MB)
  테스트 8 〉	실패 (0.01ms, 3.93MB)
  테스트 9 〉	실패 (0.06ms, 3.94MB)
  테스트 10 〉	실패 (0.01ms, 3.93MB)

효율성  테스트
  테스트 1 〉	실패 (25.73ms, 40.6MB)
  테스트 2 〉	실패 (24.14ms, 38.2MB)
  테스트 3 〉	실패 (26.67ms, 39.6MB)
  테스트 4 〉	실패 (38.17ms, 40MB)
  테스트 5 〉	실패 (22.08ms, 33.6MB)
  테스트 6 〉	실패 (25.48ms, 38.5MB)
  테스트 7 〉	실패 (13.05ms, 22MB)
  테스트 8 〉	실패 (15.51ms, 24.5MB)
  테스트 9 〉	실패 (16.73ms, 28.2MB)
  테스트 10 〉	실패 (26.07ms, 38.8MB)

채점 결과
  정확성: 0.0
  효율성: 0.0
  합계: 0.0 / 100.0
테스트 1
  입력값 〉	[1, 2, 3, 1]
  기댓값 〉	4
  실행 결과 〉	테스트를 통과하였습니다.
테스트 2
  입력값 〉	[90, 0, 0, 95, 1, 1]
  기댓값 〉	185
  실행 결과 〉	테스트를 통과하였습니다.
테스트 3
  입력값 〉	[91, 90, 5, 7, 5, 7]
  기댓값 〉	104
  실행 결과 〉	테스트를 통과하였습니다.
테스트 4
  입력값 〉	[90, 0, 0, 95, 1, 1]
  기댓값 〉	185
  실행 결과 〉	테스트를 통과하였습니다.
테스트 5
  입력값 〉	[91, 90, 5, 7, 5, 7]
  기댓값 〉	104
  실행 결과 〉	테스트를 통과하였습니다.
테스트 6
  입력값 〉	[1, 2, 3]
  기댓값 〉	3
  실행 결과 〉	테스트를 통과하였습니다.
테스트 7
  입력값 〉	[11, 0, 2, 5, 100, 100, 85, 1]
  기댓값 〉	198
  실행 결과 〉	테스트를 통과하였습니다.
테스트 8
  입력값 〉	[0, 0, 0, 0, 100, 0, 0, 100, 0, 0, 1, 1]
  기댓값 〉	201
  실행 결과 〉	테스트를 통과하였습니다.
테스트 9
  입력값 〉	[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  기댓값 〉	30
  실행 결과 〉	테스트를 통과하였습니다.
테스트 10
  입력값 〉	[1000, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 1000]
  기댓값 〉	2000
  실행 결과 〉	테스트를 통과하였습니다.
테스트 11
  입력값 〉	[1000, 1, 0, 1, 2, 1000, 0]
  기댓값 〉	2001
  실행 결과 〉	테스트를 통과하였습니다.
테스트 12
  입력값 〉	[1000, 0, 0, 1000, 0, 0, 1000, 0, 0, 1000]
  기댓값 〉	3000
  실행 결과 〉	테스트를 통과하였습니다.
테스트 13
  입력값 〉	[1, 1, 4, 1, 4]
  기댓값 〉	8
  실행 결과 〉	테스트를 통과하였습니다.

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

2차 시도

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> money) {
    vector <int> stolen_first_house = {money[0], money[0]};
    vector <int> stolen_second_house = {0, money[1]};

    for (int i=2; i<money.size()-1; i++) {
        if (stolen_first_house[i-2] + money[i] > stolen_first_house[i-1]) {
            stolen_first_house.push_back(stolen_first_house[i-2] + money[i]);
        } else {
            stolen_first_house.push_back(stolen_first_house[i-1]);
        }
    }

    for (int i=2; i<money.size(); i++) {
        if (stolen_second_house[i-2] + money[i] > stolen_second_house[i-1]) {
            stolen_second_house.push_back(stolen_second_house[i-2] + money[i]);
        } else {
            stolen_second_house.push_back(stolen_second_house[i-1]);
        }
    }
     
    return (stolen_first_house[money.size()-2] > stolen_second_house[money.size()-1]) ? stolen_first_house[money.size()-2] : stolen_second_house[money.size()-1];
}
정확성  테스트
  테스트 1 〉	통과 (0.02ms, 3.95MB)
  테스트 2 〉	통과 (0.02ms, 3.89MB)
  테스트 3 〉	통과 (0.02ms, 3.96MB)
  테스트 4 〉	통과 (0.01ms, 3.95MB)
  테스트 5 〉	통과 (0.01ms, 3.96MB)
  테스트 6 〉	통과 (0.02ms, 3.96MB)
  테스트 7 〉	통과 (0.02ms, 3.89MB)
  테스트 8 〉	통과 (0.02ms, 3.96MB)
  테스트 9 〉	통과 (0.03ms, 3.9MB)
  테스트 10 〉	통과 (0.01ms, 3.95MB)

효율성  테스트
  테스트 1 〉	통과 (16.82ms, 43MB)
  테스트 2 〉	통과 (15.77ms, 40.7MB)
  테스트 3 〉	통과 (16.89ms, 42.2MB)
  테스트 4 〉	통과 (17.35ms, 42.6MB)
  테스트 5 〉	통과 (14.33ms, 36.9MB)
  테스트 6 〉	통과 (15.50ms, 41.2MB)
  테스트 7 〉	통과 (9.06ms, 24.9MB)
  테스트 8 〉	통과 (9.04ms, 25.6MB)
  테스트 9 〉	통과 (12.94ms, 31.8MB)
  테스트 10 〉	통과 (16.32ms, 41.6MB)

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

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

타겟 넘버

1차 시도

#include <string>
#include <vector>

using namespace std;

int DFS(vector<int> numbers, int target, int now_number, int depth) {
    if (depth == numbers.size()) {
        return (now_number == target) ? true : false;
    }
    
    int plus = DFS(numbers, target, now_number + numbers[depth], depth + 1);
    int minus = DFS(numbers, target, now_number - numbers[depth], depth + 1);
    
    return plus + minus;
}

int solution(vector<int> numbers, int target) {
    return DFS(numbers, target, 0, 0);
}
정확성  테스트
  테스트 1 〉	통과 (65.63ms, 3.82MB)
  테스트 2 〉	통과 (69.89ms, 3.97MB)
  테스트 3 〉	통과 (0.08ms, 3.93MB)
  테스트 4 〉	통과 (0.31ms, 3.96MB)
  테스트 5 〉	통과 (2.23ms, 3.96MB)
  테스트 6 〉	통과 (0.16ms, 3.94MB)
  테스트 7 〉	통과 (0.08ms, 3.94MB)
  테스트 8 〉	통과 (0.64ms, 3.95MB)

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

0개의 댓글