📖 문제
🧑🏻💻 풀이 과정
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
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > 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 |
댓글