https://programmers.co.kr/learn/courses/30/lessons/72412
작년 9월에 신입공채 1차 코딩테스트가 있었습니다. 그 중 효율성을 통과하지 못했던 문제인데, 프로그래머스에 문제가 올라와 풀이합니다.
가장 큰 문제는 Graph 구조로 이 문제에 접근했다는 점입니다. Trie를 이용해 모든 경우의 수를 이어서 탐색하는 방식으로 접근했는데, 정확성은 통과했지만 효율성을 통과하지 못했습니다.
이 문제는 한 번에 원하는 조건의 지원자 수에 접근할 수 있도록 풀어야 시간 초과가 나지 않습니다.
https://tech.kakao.com/2021/01/25/2021-kakao-recruitment-round-1/
해설은 이 곳에 나와있습니다.
코드
get_subset
1 |
|
get_answer_by_binary_search
1 |
|
solution
1 |
|
solution에서 하는 일은 간단합니다.
"java backend junior pizza 150"
형태로 들어오는 info에서 “java backend junior pizza”만을 분리한 뒤, 이 info가 속할 수 있는 모든 경우의 수를 구합니다. get_subset 함수가 이 역할을 하게 됩니다.
언어 | 직군 | 경력 | 소울 푸드 | 점수 |
---|---|---|---|---|
java | backend | junior | pizza | 150 |
– | backend | junior | pizza | 150 |
java | – | junior | pizza | 150 |
java | backend | – | pizza | 150 |
java | backend | junior | – | 150 |
– | – | junior | pizza | 150 |
– | backend | – | pizza | 150 |
… (생략) | ||||
java | – | – | – | 150 |
– | – | – | – | 150 |
1 |
|
lower bound(binary search)를 이용해 답을 구하기 때문에 모든 value를 정렬해주고, 답을 구합니다. get_answer_by_binary_search 함수가 이 역할을 하게 됩니다.
검색 조건을 어떻게 그룹화하느냐에 따라 효율성 체크 여부가 갈렸던 문제입니다. 보자마자 Trie가 생각나서 다른 방법은 미처 생각하지 못했는데 조금 더 유연한 사고로 코딩테스트에 임해야겠습니다.