프로그래머스|순위 검색

README·2023년 1월 18일
0

파이썬 PS풀이

목록 보기
115/136

문제 설명

각 지원자들의 특성과 점수를 입력받고 특정 특성들을 가진 지원자들중 일정 이상의 점수를 가진 지원자들의 수를 구하는 문제입니다.

작동 순서

  1. 지원자들의 특성과 점수를 입력받습니다.
  2. 지원자들의 특성을 가능한 모든 경우로 조합하고 조합된 결과를 키로 사용하여 점수를 딕셔너리에 저장합니다.
  3. 필요한 특성들을 입력받습니다.
  4. 필요한 특성들을 조합하여 해당 조합의 딕셔너리에서 원하는 점수 이상을 가진 지원자의 수를 구합니다. 이때 순차탐색을 통해서 수를 구할 경우 타임오버가 되므로 이진탐색을 통해서 몇명까지 기준점을 넘기는지 구하고 그 수를 통해 지원자의 수를 구합니다.
  5. 지원자의 수를 모두 구하였으면 구한 지원자의 수를 출력합니다.

소스코드

from itertools import combinations
from bisect import bisect_left


def solution(infos, query):
    answer = []
    d = {}
    for info in infos:
        s = info.split(' ')
        for i in range(5):
            for c in combinations(s[0:4], i):
                string = str(c).replace('(', '').replace(')', '')
                string = string.replace('\'', '').replace(',', '')
                string = string.replace(' ', '')
                if string in d:
                    d[string].append(int(s[4]))
                else:
                    d[string] = [int(s[4])]

    for i in d:
        d[i].sort()

    for i in range(len(query)):
        query[i] = query[i].replace('and', '').replace('  ', ' ')
        que = query[i].split(' ')
        string = ''
        p = 0
        for q in que[0:4]:
            if q != '-':
                string += q
        if string not in d:
            answer.append(0)
        else:
            idx = bisect_left(d[string], int(que[4]))
            answer.append(len(d[string]) - idx)
    return answer
profile
INTP 개발자 지망생

0개의 댓글