본문 바로가기

알고리즘/Kakao

[카카오 코딩 테스트] 무지의 먹방 라이브

https://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/

 

2019 카카오 신입 공채 1차 코딩 테스트 문제 해설

작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데요. 지원자분들 만큼이나 준비위원들도 테스트가 문제없이, 공정하게 치러질 수 있도록 많은 준비를 했고 두근 거리는 마음으로 끝까지 온라인 테스트를 모니터링했답니다. 문제는 작년과 비슷하게 구현 문제 위주로 쉬운 난이도에서 어려운 […]

tech.kakao.com

4번 무지의 먹방 라이브는 효율성이 중요한 문제였습니다.

정확성만 보면 쉽게 풀 수 있는 문제 였지만, 효율성이 정답률이 5.52% 밖에 안됬습니다..ㄷㄷ

 

저도 효율성에서 자꾸 막혀서 결국 정답자 분의 코드를 보며 수정했는데요..

 

코드도 엄청 짧고 복잡하게 생각할 필요가 없는 문제였습니다..

 

처음에는

1. 시간을 기준으로 오름차순으로 정렬 

--- loop ---

2. 0번째 배열의 시간 * 배열 크기 를 k에서 빼기

3. 모든 배열에서 0번째 배열의 시간만큼 빼주고

   시간이 0이 되는 index는 vector의 erase함수를 활용해서 없애기

--- loop end ---

4. 남은 배열의 크기 > k 라면 %를 활용해서 index 구하기.

   아니라면 -1 !!

 

이렇게하니 정확성은 다 맞았지만 효율성에서는 한개 빼고 다 시간초과가 뜨더군요..ㅠㅠ

 

후에 정답 코드를 확인하고 보니 3번 과정은 전혀 쓸모가 없는 과정이었습니다.. 

배열의 시간들을 일일이 빼줄 필요도 없었고 erase할 필요도 없었습니다.. 

그저 이전 index의 시간과의 차이를 이용하면 끝이었습니다!

코드를 보고나면 엄청 쉬운 문제지만 이렇게 바로 생각해내기가 너무 어려운 것 같습니다..

 

아래는 풀이한 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
 
bool sort_by_idx(pair<ll,int> a, pair<ll,int> b) {
    return a.second < b.second;
}
int solution(vector<int> food_times, ll k) {
    vector<pair<ll, int>> times;
    for (int i = 0; i < food_times.size(); i++) {
        times.push_back({ food_times[i], i + 1 });
    }
    sort(times.begin(), times.end());
    int n = times.size();
    int i = 0;
    for (; i < n; i++) {
        ll diff = (i == 0 ? times[0].first : times[i].first - times[i - 1].first);
        ll total = diff * (n - i);
        if (k - total < 0break;
        else k -= total;
    }
    if (i == n) return -1;
    k %= (n - i);
    sort(times.begin() + i, times.end(), sort_by_idx);
    return times[i + k].second;
}
int main(void) {
    //vector<int> food_times = { 6,6,6,6,6,6,6 };
    //long long k = 40;
    vector<int> food_times = { 312 };
    long long k = 6;
    cout << solution(food_times, k);
    return 0;
}
cs

 

질문이나 지적사항은 댓글 부탁드립니다:)