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
- 아이디어: 더 빠르게 기준에 부합하는 지원자 수를 찾기 위해 딕셔너리에 각 지원자들의 정보에 대한 모든 조합을 키로, 그 지원자의 코테 점수를 값으로 저장
- 브루트 포스로 해결했지만, 효율성 테스트에서 실패하고 나서 카카오 테크 문제해설을 토대로 코드를 작성함(제한사항을 더 꼼꼼히 볼 것)
'CS > algorithm & data structure' 카테고리의 다른 글
[프로그래머스] [1차] 프렌즈4블록 (파이썬 풀이) (0) | 2022.06.30 |
---|---|
[프로그래머스] 후보키 (파이썬 풀이) (0) | 2022.06.30 |
[프로그래머스] 튜플 (파이썬 풀이) (0) | 2022.06.27 |
[프로그래머스] 수식 최대화 (파이썬 풀이) (0) | 2022.06.26 |
[프로그래머스] 거리두기 확인하기 (파이썬 풀이) (0) | 2022.06.26 |