카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. 이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다.
- [조건]을 만족하는 사람 중 코딩테스트 점수를 X점 이상 받은 사람은 모두 몇 명인가?
로 질의했을때, 각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
그냥 풀기는 쉽게 풀었는데 효율성을 하나도 통과하지 못했다
def solution(info, query):
answer = []
applicants = {}
for i in range(len(info)):
pl, job, career, food, score = info[i].split(" ")
applicants[i] = {1: pl, 2: job, 3: career, 4: food, 5: score}
for q in query:
count = 0
query_comp = []
for i in list(q.replace("and ", "").split(" ")):
if i != "-":
query_comp.append(i)
for applicant in applicants.values():
flag = True
for qc in query_comp[:-1]:
if qc not in applicant.values():
flag = False
break
if flag is True and int(applicant[5]) >= int(query_comp[-1]):
count += 1
answer.append(count)
return answer
not in 이 시간이 오래 걸리는 것 같아서 not in을 사용하지 않는 쪽으로 구현해봤는데 시간이 미세하게 줄어들뿐 효율성은 여전히 통과하지 못했다 ㅠ ㅠ
def solution(info, query):
answer = []
applicants = {}
for i in range(len(info)):
pl, job, career, food, score = info[i].split(" ")
applicants[i] = {0: pl, 1: job, 2: career, 3: food, 4: score}
for q in query:
count = 0
query_comp = list(q.replace("and ", "").split(" "))
for applicant in applicants.values():
flag = True
i = 0
for qc in query_comp[:-1]:
if qc != "-":
if qc != applicant[i]:
flag = False
break
i += 1
if flag is True and int(applicant[4]) >= int(query_comp[-1]):
count += 1
answer.append(count)
return answer
433*3의 크기를 가지는 dictionary에 각 지원자의 id를 저장해서 query별로 카운트하였는데 이거도 시간초과가 났다,,,,,, O(i + q) 아닌가,,
def solution(info, query):
answer = []
languages = ["cpp", "java", "python", "-"]
job_group = ["backend", "frontend", "-"]
career = ["junior", "senior", "-"]
food = ["chicken", "pizza", "-"]
applicants = {}
scores = []
for l in languages:
for j in job_group:
for c in career:
for f in food:
str1 = l+j+c+f
applicants[str1] = set()
for i in range(len(info)):
l, j, c, f, score = info[i].split(" ")
scores.append(score)
for ll in [l, "-"]:
for jj in [j, "-"]:
for cc in [c, "-"]:
for ff in [f, "-"]:
applicants[ll+jj+cc+ff].add(i)
for q in query:
count = 0
l, j, c, f, score = list(q.replace("and ", "").split(" "))
for a in applicants[l+j+c+f]:
if int(score) <= int(scores[a]):
count += 1
answer.append(count)
return answer
결국 모르겠어서 질문하기의 풀이 흐름을 보고 풀었다,, 캐어려움
for l in languages:
for j in job_group:
for c in career:
for f in food:
str1 = l+j+c+f
applicants[str1] = []
for i in range(len(info)):
l, j, c, f, score = info[i].split(" ")
scores.append(score)
for ll in [l, "-"]:
for jj in [j, "-"]:
for cc in [c, "-"]:
for ff in [f, "-"]:
applicants[ll+jj+cc+ff].append(int(score))
for a in applicants.values():
a.sort()
for q in query:
count = 0
l, j, c, f, score = list(q.replace("and ", "").split(" "))
idx = bisect_left(applicants[l+j+c+f], int(score))
answer.append(len(applicants[l+j+c+f]) - idx)
def solution(info, query):
answer = []
languages = ["cpp", "java", "python", "-"]
job_group = ["backend", "frontend", "-"]
career = ["junior", "senior", "-"]
food = ["chicken", "pizza", "-"]
applicants = {}
scores = []
for l in languages:
for j in job_group:
for c in career:
for f in food:
str1 = l+j+c+f
applicants[str1] = []
for i in range(len(info)):
l, j, c, f, score = info[i].split(" ")
scores.append(score)
for ll in [l, "-"]:
for jj in [j, "-"]:
for cc in [c, "-"]:
for ff in [f, "-"]:
applicants[ll+jj+cc+ff].append(int(score))
for a in applicants.values():
a.sort()
for q in query:
count = 0
l, j, c, f, score = list(q.replace("and ", "").split(" "))
idx = bisect_left(applicants[l+j+c+f], int(score))
answer.append(len(applicants[l+j+c+f]) - idx)
return answer
정말 어렵구만요,,