Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

JH 개발 블로그

2021 카카오 코딩테스트 lv2. 순위 검색 파이썬 본문

코딩테스트/2021 KAKAO BLIND RECRUITMENT

2021 카카오 코딩테스트 lv2. 순위 검색 파이썬

쿠우우훈 2022. 1. 24. 07:01
from bisect import bisect_left
from collections import defaultdict

def solution(info, query):
    candidates = defaultdict(list)
    answer = []

    for i in range(len(info)):
        temp = info[i].split()
        for i in [temp[0], '-']:
            for j in [temp[1], '-']:
                for k in [temp[2], '-']:
                    for l in [temp[3], '-']:
                        candidates[(i,j,k,l)].append(int(temp[4]))

    for c in candidates:
        candidates[c].sort()


    for i in range(len(query)):
        temp = query[i].split()
        conditions = (temp[0],temp[2],temp[4],temp[6])
        score = temp[7]
        answer.append(len(candidates[conditions]) - bisect_left(candidates[conditions],int(score)))

    return answer

만약 query의 요소중 하나가 "- and backend and senior and chicken 150" 이라면,

"cpp and backend and senior and chicken 150"

"java and backend and senior and chicken 150"

"python and backend and senior and chicken 150"

위 세개의 조건을 물어보는것과 같습니다.

 

따라서 딕셔너리[(개발언어,직군,경력,소울푸드)] 에 점수를 넣고, 각 항목 하나씩  '-'로 변경한 후에도 점수를 넣어줍니다.

 

그 후, 효율성 테스트 통과를 위해 딕셔너리를 정렬 해준뒤 이분탐색하여 수를 구해줍니다.

 

Comments