chyam

[프로그래머스 Lv2, python] - 순위 검색 본문

프로그래머스/LV2

[프로그래머스 Lv2, python] - 순위 검색

chyam_eun 2025. 5. 13. 17:10

https://school.programmers.co.kr/learn/courses/30/lessons/72412

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

# 시간초과 풀이
def change(li):
    new = []
    for i in li:
        i = i.replace("and"," ")
        tmp = i.split()
        new.append(tmp)
    return new

def solution(info, query):
    ans = []
    new_info = change(info) 
    new_query = change(query)
    
    for qu in new_query:
        res = 0 
        for inf in new_info:
            cnt = 0
            for idx in range(4):
                if qu[idx] == '-': # 모두 가능 
                    cnt += 1
                    continue
                if qu[idx] != inf[idx]: # 다를때
                    break
                else:
                    cnt += 1
            if cnt == 4:
                if int(qu[4]) <= int(inf[4]): # 기준점수 만족?
                    res += 1
        ans.append(res)
    
    return ans
def solution(infos, queries):
    answer = []

    # 총 경우의 수 (108가지)
    info_dict = {}

    for lang in ['cpp', 'java', 'python', "-"]:
        for job in ['backend', 'frontend', "-"]:
            for career in ['junior', 'senior', "-"]:
                for food in ['chicken', 'pizza', "-"]:
                    info_dict[lang + job + career + food] = []

    # 지원자의 경우의 수
    for info in infos:
        info = info.split(" ")
        for lang in [info[0], "-"]:
            for job in [info[1], "-"]:
                for career in [info[2], "-"]:
                    for food in [info[3], "-"]:
                        info_dict[lang + job + career + food].append(int(info[4]))
    

    for key in info_dict.keys():
        info_dict[key].sort() # 숫자 오름차순으로 정렬
        
    for query in queries:
        query = query.replace(" and ", "") # 다 붙여버리기. cppsenior 이런식으로
        query = query.split() # 점수와 분리

        query_score = int(query[1])
        query = query[0] 

        # 점수
        info_score = info_dict[query]
        l = len(info_score)
        tmp = l

        low, high = 0, l - 1

        while low <= high:
            mid = (low + high) // 2

            if query_score <= info_score[mid]:
                tmp = mid
                high = mid - 1

            else:
                low = mid + 1

        answer.append(l - tmp)
    return answer