새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[프로그래머스] 순위 검색

by 언호 2022. 2. 8.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

점수들을 찾는 쿼리문에서 - 기호가 존재하여, 특정 항목을 구분하지 않고 찾아오는 경우가 있습니다.

이를 위해 사용자들의 점수를 받을때, 조합을 이용하여 - 기호가 어느 위치에 들어가는지 모두 구해주었습니다.

그리하여 응시자 선택 사항을 키값으로 하는 딕셔너리에 점수들을 추가하였습니다.

 

정확성 테스트는 통과했으나, 효율성 테스트는 통과하지 못했습니다.

2) 알고리즘

  • 문자열

3) 풀이 코드

사용 언어 - Python

from itertools import combinations

def solution(infos, query):
    answer = []                 # 정답 리스트
    people = {}                 # 선택한 항목별 점수를 저장할 딕셔너리

    for info in infos:
        info = info.split(' ')  # 입력으로 주어지는 정보들을 사용하기 편리하게 분리

        for k in range(5):                          # 추후에 쿼리를 통해 정보를 찾을때 - 기호가 들어가므로
            for comb in combinations(range(4), k):  # 조합을 이용하여 어느 인덱스에 - 기호를 넣을지 구분
                tmp = []

                for idx in range(4):
                    if idx in comb:                 # 현재 인덱스에 - 기호가 들어가야 하는 경우
                        tmp.append('-')
                    else:                           # 현재 인덱스에 - 기호가 들어가지 않는 경우
                        tmp.append(info[idx])
                
                people[' '.join(tmp)] = people.get(' '.join(tmp), []) + [int(info[-1])]     # 딕셔너리에 현재 지원자의 점수 추가

    for q in query:
        q = q.split(' and ')
        q.extend(q.pop().split(' '))
        scores = sorted(people.get(' '.join(q[:4]), {}), reverse=True)      # 찾으려는 선택 사항의 키값에 해당하는 점수들을 모두 가져옴
        
        cnt = 0                         # 쿼리문의 점수 이상이 몇개인지 카운트
        for score in scores:
            if score >= int(q[-1]):
                cnt += 1
            else:
                break

        answer.append(cnt)

    return answer

📝 결과 및 학습한 내용

1) 어려웠던 내용

정확성 테스트는 통과하였으나 효율성 테스트는 통과하지 못했습니다.

입력으로 주어지는 데이터의 양이 많아지는 경우 시간초과 문제를 해결하기 어려웠습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

- 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

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[프로그래머스] 방금그곡  (0) 2022.02.10
[백준] 16916 부분 문자열  (0) 2022.02.09
[백준] 16120 PPAP  (0) 2022.02.06
[백준] 1254 팰린드롬 만들기  (0) 2022.02.05
[백준] 4358 생태학  (0) 2022.02.04

댓글