일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로그래머스 #python #2021카카오 #카카오코테 #카카오인턴쉽
- 프로그래머스 #python #코딩테스트 #코테공부 #알고리즘 #dict
- 그리디알고리즘 #그리디 #백준 #우선순위큐 #최소힙 #최대힙 #알고리즘 #코딩테스트 #python
- 동
- 프로그래머스 #sql #mysql #코딩테스트
- 프로그래머스 #네트워크 #c++ #코딩테스트 #코테 #코테준비 #dfs
- 프로그래머스 #c++ #코딩테스트
- 백준 #백준알고리즘 #알고리즘 #코딩테스트 #코딩테스트준비 #코테준비 #백준2110 #python #문제풀이
- 프로그래머스 #NULL 처리하기
- 백준 #이거다시풀기
- 백준 #백준2217 #백준로프 #python
- 카카오 #프로그래머스 #python #코딩테스트 #오픈채팅방
- 카카오 코테
- Today
- Total
say repository
[프로그래머스] 순위 검색 python (*) 본문
https://programmers.co.kr/learn/courses/30/lessons/72412?language=python3
코딩테스트 연습 - 순위 검색
["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
출처 : 프로그래머스
https://tech.kakao.com/2021/01/25/2021-kakao-recruitment-round-1/
2021 카카오 신입공채 1차 온라인 코딩 테스트 for Tech developers 문제해설
지난 2020년 9월 12일 토요일 오후 2시부터 7시까지 5시간 동안 2021 카카오 신입 개발자 공채 1차 코딩 테스트가 진행되었습니다. 테스트에는 총 7개의 문제가 출제되었으며, 개발 언어는 C++, Java, Jav
tech.kakao.com
코드
from collections import defaultdict
from bisect import bisect_left
from itertools import combinations
def solution(info, query):
answer = []
dic = defaultdict(list)
for i in info:
i = i.split()
cond = i[:-1]
score = int(i[-1])
for i in range(5):
cases = list(combinations([0,1,2,3],i))
# print(cases)
for case in cases:
tmp = cond.copy()
for c in case:
tmp[c] = '-'
key = ''.join(tmp)
dic[key].append(score)
# print(dic)
for val in dic.values():
val.sort()
for q in query:
q = q.replace("and ", "")
q = q.split()
target_cond = ''.join(q[:-1])
target_score = int(q[-1])
cnt = 0
if target_cond in dic:
target_list = dic[target_cond]
# print(target_list)
idx = bisect_left(target_list, target_score)
cnt = len(target_list) - idx
answer.append(cnt)
return answer
풀이
query 문과 info의 조건을 모두 비교해서 풀면 효율성에서 합격하지 못한다.
효율성에서 통과되지 못해서 카카오 풀이를 참고했다.
1) info 에 있는 조건으로 만들 수 있는 모든 경우의 수를 key로 갖고있는 defaultdict를 생성해야한다.
key는 모든 조건, 값은 score 로 갖는 defaultdict 를 생성한다.
2) 이렇게 생성된 dic는 score 값을 기준으로 오름차순 정렬한다.
3) 이제 query와 비교하여 찾는다.
query에 조건이 info의 key로 있다면 score 값들을 target_list 로 가져온다.
4) 여기서 또, 하나하나 찾는다면 효율성에 문제가 생긴다.
빠르게 탐색하기 위해 순차탐색 보다는 이진탐색을 활용하자.
bisect_left 를 이용하여 target_list 에서 target_score 가 있는 인덱스를 구하고
이 인덱스를 전체 target_list 에서 빼준다면 정답에 추가할 cnt 가 된다.
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 파일명 정렬 Python (0) | 2022.06.10 |
---|---|
[프로그래머스] 방금그곡 python (0) | 2022.06.09 |
[프로그래머스] 조이스틱 python (*) (0) | 2022.05.28 |
[프로그래머스] 행렬 테두리 회전하기 python (*) (0) | 2022.05.27 |
[프로그래머스] 피로도 python (0) | 2022.05.26 |