사용 언어: python 3.9.5
https://programmers.co.kr/learn/courses/30/lessons/72412
query에 해당하는 값을 뽑아내는 문제.
정확도, 효율성 채점기준이 따로 있다.
레벨 2
데이터를 정렬시켜둔다.
데이터를 언어, 직군, 경력, 소울푸드가 변하는 지점의 인덱스를 체크해둔다.
쿼리가 들어오면 해당 범위 내에서의 숫자을 이분탐색하며 찾는다.
→ 나중에 cpp안에도 backend, frontend가 있고, java 안에도 backend, frontend가 있는 등 범위가 한가지가 아니라는 것을 깨닫고 포기
(30분정도 소요)
"""
아이디어
인원수: n, 문제수: N
그때그떄 하나씩 서치하면 -> nN
정보를 저장해둬야함..
처음에 정렬을 해두고, binary search로 탐색?
1. info를 split으로 분리
2. 전체 정렬
3. binary search로 탐색하기
"""
def b_search()
def solution(info, query):
info.sort()
data = []
for i in info:
data.append(i.split())
d = {"cpp":0, "java": 1, "python":2,
"backend":0, 'frontend': 1,
'junior':0, 'senior': 1,
'chicken':0, 'pizza': 1}
for i in query:
start = 0
end = len(data)
q = query.split()
for j in range(5):
if q[j] == "-":
pass
else:
while True:
mid = (start+ end)// 2
# 큰 곳을 탐색해야 함
if d[data[mid][j]] < d[q[j]]:
start = mid
# 올바른 값:
elif d[data[mid][j]]==d[q[j]]:
# start와 end 범위 조정
while d[data[start][j]]!=d[q[j]]:
start += 1
while d[data[end][j]]!=d[q[j]]:
end -= 1
break
# 작은 곳을 탐색해야 함
else:
end = mid
answer = []
return answer
실패
원인: 구현 실패
30분 정도
배열 안에 넣어서 해보려고 함
data[cpp][backend][경력][소울푸드] = [점수]
이런식으로 사용할 수 있게..
⇒그런데 -가 들어있어서 data[-][backend][-][chicken] 같은 경우는 배열을 사용하기가 복잡함.
-가 있으면 반복이 필요한데, 재귀를 쓰기도 반복문을 쓰기도 애매함.
그래서 포기
def solution(info, query):
d = {"cpp":0, "java": 1, "python":2,
"backend":0, 'frontend': 1,
'junior':0, 'senior': 1,
'chicken':0, 'pizza': 1}
# info.sort(key= lambda x: (x[4], x[0], x[1], x[2], x[3]))
info.sort()
data = [[[[[]for _ in range(2)] for _ in range(2)]for _ in range(2)]for _ in range(3)]
for i in info:
dt = i.split()
data[d[dt[0]]][d[dt[1]]][d[dt[2]]][d[dt[3]]].append(dt[4])
for i in query:
q = query.split()
qu = [q[0], q[2], q[4], q[6]]
for j in qu:
if j == "-":
for
실패
원인: 구현 실패
해설지
https://tech.kakao.com/2021/01/25/2021-kakao-recruitment-round-1/
-가 들어갈 수 있는 모든 경우의 수에 대해 미리 그룹을 지어 둔다.
한 사람을 찾을 수 있는 조합은 16가지인데, 모든 16가지 조합이 그 한 사람을 가리킬 수 있게 해둬야 한다.
30분만 해야하는데, 너무 오래동안 문제를 붙잡고 있었다.
안 풀리는 문제는 빨리 손 놓자.
카카오 풀이
조합에 대해 combinations 모듈 사용
defaltdictionary로 경우의 수 16개에 대한 해시 작성