Coding Test Study - 10주차

Checking·2021년 6월 22일
0

Coding Test Study

목록 보기
11/22

탐욕법 (Greedy)

체육복

1차 시도

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    vector <int> have_clothes(n, 1);
    
    for (int n:lost) have_clothes[n]--;
    for (int n:reserve) have_clothes[n]++;
    
    for (int i=0; i<have_clothes.size(); i++) {
        if (have_clothes[i] == 0) {
            if (i > 0 && have_clothes[i-1] == 2) {
                have_clothes[i-1]--;
                have_clothes[i]++;
            } else if (i < have_clothes.size()-1 && have_clothes[i+1] == 2) {
                have_clothes[i+1]--;
                have_clothes[i]++;
            }
        }
        
        if (have_clothes[i] >= 1) answer++;
    }
    
    return answer;
}
정확성  테스트
  테스트 1 〉	실패 (0.01ms, 3.85MB)
  테스트 2 〉	실패 (0.01ms, 3.97MB)
  테스트 3 〉	통과 (0.01ms, 3.95MB)
  테스트 4 〉	통과 (0.01ms, 3.96MB)
  테스트 5 〉	실패 (0.01ms, 3.95MB)
  테스트 6 〉	통과 (0.01ms, 3.91MB)
  테스트 7 〉	통과 (0.01ms, 3.97MB)
  테스트 8 〉	통과 (0.01ms, 3.96MB)
  테스트 9 〉	실패 (0.01ms, 3.72MB)
  테스트 10 〉	통과 (0.01ms, 3.96MB)
  테스트 11 〉	실패 (0.01ms, 3.89MB)
  테스트 12 〉	통과 (0.01ms, 3.91MB)

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

2차 시도

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    vector <int> have_clothes(n, 1);
    
    for (int n:lost) have_clothes[n-1]--;
    for (int n:reserve) have_clothes[n-1]++;
    
    for (int i=0; i<have_clothes.size(); i++) {
        if (have_clothes[i] == 0) {
            if (i > 0 && have_clothes[i-1] == 2) {
                have_clothes[i-1]--;
                have_clothes[i]++;
            } else if (i < have_clothes.size()-1 && have_clothes[i+1] == 2) {
                have_clothes[i+1]--;
                have_clothes[i]++;
            }
        }
        
        if (have_clothes[i] >= 1) answer++;
    }
    
    return answer;
}
정확성  테스트
  테스트 1 〉	통과 (0.01ms, 3.97MB)
  테스트 2 〉	통과 (0.01ms, 3.97MB)
  테스트 3 〉	통과 (0.01ms, 3.78MB)
  테스트 4 〉	통과 (0.01ms, 3.93MB)
  테스트 5 〉	통과 (0.01ms, 3.97MB)
  테스트 6 〉	통과 (0.01ms, 3.82MB)
  테스트 7 〉	통과 (0.01ms, 3.8MB)
  테스트 8 〉	통과 (0.01ms, 3.97MB)
  테스트 9 〉	통과 (0.01ms, 3.91MB)
  테스트 10 〉	통과 (0.01ms, 3.97MB)
  테스트 11 〉	통과 (0.01ms, 3.99MB)
  테스트 12 〉	통과 (0.01ms, 3.92MB)

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

조이스틱

1차 시도

#include <string>
#include <vector>

using namespace std;

int optimal_distance(string name, int * pos) {
    int left_move = 0, right_move = 0;
    
    for (int i=0; i<name.length(); i++) {
        if ((name[*pos] != 'A') || (left_move != 0 && right_move != 0)) break;

        if (left_move == 0 && name[(*pos - i + name.length()) %  name.length()] != 'A') left_move = i;
        if (right_move == 0 && name[(*pos + i) %  name.length()] != 'A') right_move = i;
    }

    *pos = (*pos + ((left_move < right_move) ? name.length()-left_move : right_move)) % name.length();

    return (left_move < right_move) ? left_move : right_move;
}

int solution(string name) {
    int answer = 0;
    int pos = 0;
     
    vector <int> alphabet_code = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    
    for (string c(name.length(), 'A'); c != name; name[pos] = 'A') {
        answer += optimal_distance(name, &pos) + alphabet_code[name[pos] - 'A'];
    }
    
    return answer;
}
정확성  테스트
  테스트 1 〉	통과 (0.01ms, 3.93MB)
  테스트 2 〉	통과 (0.01ms, 3.95MB)
  테스트 3 〉	통과 (0.01ms, 3.95MB)
  테스트 4 〉	통과 (0.01ms, 3.89MB)
  테스트 5 〉	통과 (0.01ms, 3.95MB)
  테스트 6 〉	통과 (0.01ms, 3.95MB)
  테스트 7 〉	통과 (0.01ms, 3.97MB)
  테스트 8 〉	통과 (0.01ms, 3.93MB)
  테스트 9 〉	통과 (0.01ms, 3.89MB)
  테스트 10 〉	통과 (0.01ms, 3.96MB)
  테스트 11 〉	통과 (0.01ms, 3.95MB)

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

0개의 댓글