Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- SQL
- 데이터 시각화
- PCCP
- AWS
- 코딩테스트
- 슈퍼셋
- 코딩 테스트
- 데브코스
- 팀 프로젝트
- django
- GCP
- airflow
- HTML
- cloud platform
- Snowflake
- 데이터 엔지니어
- superset
- Selenium
- VPC
- Til
- Kafka
- Spark
- Tableau
- 코테 연습
- beuatifulsoup
Archives
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
코딩 테스트(Python) 2021 KAKAO BLIND RECRUITMENT 순위 검색 본문
문제 설명
[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]
카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. 이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다.
- 코딩테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다.
- 지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다.
- 지원 경력구분 항목에 junior와 senior 중 하나를 선택해야 합니다.
- 선호하는 소울푸드로 chicken과 pizza 중 하나를 선택해야 합니다.
인재영입팀에 근무하고 있는 니니즈는 코딩테스트 결과를 분석하여 채용에 참여한 개발팀들에 제공하기 위해 지원자들의 지원 조건을 선택하면 해당 조건에 맞는 지원자가 몇 명인 지 쉽게 알 수 있는 도구를 만들고 있습니다.
예를 들어, 개발팀에서 궁금해하는 문의사항은 다음과 같은 형태가 될 수 있습니다.
코딩테스트에 java로 참여했으며, backend 직군을 선택했고, junior 경력이면서, 소울푸드로 pizza를 선택한 사람 중 코딩테스트 점수를 50점 이상 받은 지원자는 몇 명인가?
물론 이 외에도 각 개발팀의 상황에 따라 아래와 같이 다양한 형태의 문의가 있을 수 있습니다.
- 코딩테스트에 python으로 참여했으며, frontend 직군을 선택했고, senior 경력이면서, 소울푸드로 chicken을 선택한 사람 중 코딩테스트 점수를 100점 이상 받은 사람은 모두 몇 명인가?
- 코딩테스트에 cpp로 참여했으며, senior 경력이면서, 소울푸드로 pizza를 선택한 사람 중 코딩테스트 점수를 100점 이상 받은 사람은 모두 몇 명인가?
- backend 직군을 선택했고, senior 경력이면서 코딩테스트 점수를 200점 이상 받은 사람은 모두 몇 명인가?
- 소울푸드로 chicken을 선택한 사람 중 코딩테스트 점수를 250점 이상 받은 사람은 모두 몇 명인가?
- 코딩테스트 점수를 150점 이상 받은 사람은 모두 몇 명인가?
즉, 개발팀에서 궁금해하는 내용은 다음과 같은 형태를 갖습니다.
- [조건]을 만족하는 사람 중 코딩테스트 점수를 X점 이상 받은 사람은 모두 몇 명인가?
[문제]
지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩테스트 점수를 하나의 문자열로 구성한 값의 배열 info, 개발팀이 궁금해하는 문의조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때,
각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
from collections import defaultdict
from itertools import combinations
def solution(info, query):
# 데이터 딕셔너리 초기화: 키는 조건, 값은 점수 리스트
data = defaultdict(list)
answer = [] # 쿼리 결과를 저장할 리스트
# 1. 정보 처리
for inf in info:
p = inf.split() # 각 정보를 공백 기준으로 나누기
parts = p[:4] # 조건 부분 (언어, 직군, 경력, 소울푸드)
score = int(p[-1]) # 점수는 마지막 부분
keys = [] # 가능한 조건의 조합을 저장할 리스트
# 2. 모든 조합에 대해 '-'로 대체한 키를 생성
for i in range(5): # 0개부터 4개까지 선택
for comb in combinations(range(4), i): # 4개의 조건 중 i개를 선택
key = list(parts) # 조건 리스트 복사
for j in comb: # 선택된 인덱스는 '-'
key[j] = '-'
keys.append(key) # 생성된 조건 추가
# 3. 모든 가능한 조합에 대해 점수를 추가
for k in keys:
data[tuple(k)].append(score) # 조건을 튜플로 변환하여 딕셔너리에 추가
# 4. 각 조건에 대한 점수 리스트를 정렬
for i in data:
data[i].sort()
# 5. 쿼리 처리
for q in query:
qq = q.replace('and', '').split() # 'and' 제거하고 공백으로 분리
q_parts = qq[:4] # 조건 부분
score = int(qq[-1]) # 점수는 마지막 부분
# 6. 해당 조건에 맞는 점수 리스트 가져오기
scores = data[tuple(q_parts)]
# 7. 이진 탐색을 사용하여 조건에 맞는 점수 개수 찾기
left, right = 0, len(scores)
while left < right:
mid = (left + right) // 2 # 중간값 계산
# 점수가 작으면 오른쪽 부분 탐색
if int(scores[mid]) < score:
left = mid + 1
else: # 점수가 크거나 같으면 왼쪽 부분 탐색
right = mid
# 조건에 맞는 점수 개수를 계산
answer.append(len(scores) - left)
return answer # 쿼리 결과 반환
'코딩 테스트' 카테고리의 다른 글
코딩 테스트(Python) 2019 카카오 개발자 겨울 인턴십 불량 사용자 (0) | 2024.12.17 |
---|---|
코딩 테스트(Python) n-queen (0) | 2024.12.17 |
코딩 테스트(Python) 빛의 경로 사이클 (0) | 2024.12.17 |
코딩 테스트(Python) 교점에 별 만들기 (0) | 2024.12.17 |
코딩 테스트(Python) 2022 KAKAO BLIND RECRUITMENT 양궁대회 (0) | 2024.12.17 |