Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 2_순위 검색 (2021 KAKAO BLIND RECRUITMENT)

syunze 2023. 11. 12. 21:35

📌문제 유형

2021 KAKAO BLIND RECRUITMENT

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

- 정확성 통과, 효율성 4문제 오답

import re

def solution(info, query):
    answer = []
    
    # info 나누기
    new_info = []
    info_scores = []
    for line in info:
        tmp = list(map(str,line.split(' ')))
        new_info.append(tmp[:-1])
        info_scores.append(int(tmp[-1]))
    
    # query 나누기
    querys = []
    q_scores = []
    for q in query:
        t = re.split(' and | ',q)
        q_scores.append(int(t[-1]))
        querys.append(t[:-1])
    
    for i in range(len(querys)):
        result = 0
        for j in range(len(new_info)):
            # 점수가 맞는 경우만 조건 따지기
            if q_scores[i] <= info_scores[j]:
                if querys[i] == new_info[j] and querys[i] == ['-' ,'-', '-', '-']:
                    result += 1
                else:
                    flag = 0
                    for k in range(len(querys[i])):
                        if querys[i][k] == '-':
                            continue
                        elif querys[i][k] != new_info[j][k]:
                            flag = 1
                            break
                        else:
                            continue
                        
                            
                    if flag == 0:
                        result += 1
        answer.append(result)
                
    return answer

 

 

📌다른 사람들의 풀이

 

[프로그래머스] 순위 검색 / 파이썬

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

velog.io

from itertools import combinations
from collections import defaultdict
from bisect import bisect_left

def solution(information, queries):
    answer = []
    dic = defaultdict(list)
    for info in information:
        info = info.split()
        condition = info[:-1]  
        score = int(info[-1])
        for i in range(5):
            case = list(combinations([0,1,2,3], i))
            for c in case:
                tmp = condition.copy()
                for idx in c:
                    tmp[idx] = "-"
                key = ''.join(tmp)
                dic[key].append(score) 

    for value in dic.values():
        value.sort()   

    for query in queries:
        query = query.replace("and ", "")
        query = query.split()
        target_key = ''.join(query[:-1])
        target_score = int(query[-1])
        count = 0
        
        if target_key in dic:
            target_list = dic[target_key]
            idx = bisect_left(target_list, target_score)
            count = len(target_list) - idx
        answer.append(count)      
    return answer

 

📌리뷰

 

- 이분탐색 문제. 생각보다 변수 수가 적으면 dic 활용도 생각해보기

  • Python 이분탐색은 bisect 활용
 

[알고리즘] 이분 탐색 / 이진 탐색 (Binary Search)

이진 탐색(이분 탐색) 알고리즘은 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다.이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는

velog.io

 

728x90