CS/algorithm & data structure
[프로그래머스] 순위 검색 (파이썬 풀이)
hjkim0502
2022. 6. 29. 01:41
https://programmers.co.kr/learn/courses/30/lessons/72412
코딩테스트 연습 - 순위 검색
["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt
programmers.co.kr
* 풀이 못 함
from itertools import combinations
from bisect import bisect_left as bi
from collections import defaultdict
def solution(info, query):
result = []
# 각 지원자가 코테 결과 제외하고 통과할 수 있는 모든 경우(key)에 대해
# 그 지원자의 코테 결과(value)를 table에 저장
table = defaultdict(list)
for inf in info:
inf = inf.split()
key, value = inf[:-1], inf[-1]
for i in range(5):
for c in combinations(key, i):
new_key = tuple(c)
table[new_key].append(int(value))
# 이분탐색을 위한 정렬
for k in table:
table[k].sort()
# table에서 기업의 기준(코테 제외)에 해당하는 지원자들의 코테 점수 확인 후 합격자 수 계산
for q in query:
cut = q.replace('and ', '').replace('- ', '').split()
key, val = tuple(cut[:-1]), int(cut[-1])
if key in table:
pnts = table[key]
idx = bi(pnts, val)
result.append(len(pnts) - idx)
else:
result.append(0)
return result
- 아이디어: 더 빠르게 기준에 부합하는 지원자 수를 찾기 위해 딕셔너리에 각 지원자들의 정보에 대한 모든 조합을 키로, 그 지원자의 코테 점수를 값으로 저장
- 브루트 포스로 해결했지만, 효율성 테스트에서 실패하고 나서 카카오 테크 문제해설을 토대로 코드를 작성함(제한사항을 더 꼼꼼히 볼 것)