본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2] 순위 검색 파이썬/python

728x90

https://programmers.co.kr/learn/courses/30/lessons/72412#qna

 

코딩테스트 연습 - 순위 검색

["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

 

레벨 2 문제가 아니다; 말도안되게 어려웠음

처음에 3중for문으로 구성했다가 효율성 부분에서 탈락하고

풀이법 물색하다가

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

이 사이트에서 해설보고 만듬..

 

솔직히 이거 시험장에서 생각해서 푼 사람 있나싶다;;;;;

너무 ..어려웠음

 

효율성 탈락한 코드

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
def solution(info, query):
    answer = []
 
    for qu in query:
 
        num = 0
        qu = qu.split(" ")
 
        for fo in info:
            score = 0
            q_idx = 0
            fo = fo.split(" ")
            # 0 2 4 6 7 info
            # 0 1 2 3 4 query
            # 점수는 마지막에 따로 계산
            for i in range(len(fo) - 1):
                if fo[i] == qu[q_idx] or qu[q_idx] == '-':
                    score += 1
                else:
                    break
                q_idx += 2
            if score == 4 and int(fo[4]) >= int(qu[7]):
                num += 1
        answer.append(num)
 
    return answer
cs

 

 

합격코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from itertools import combinations
 
 
def solution(info, query):
    answer = []
    info_dict = {}
    # 모든 조합을 dict에 넣어주자
    for fo in info:
        # 인포의 각 요소들 f_list에 넣어주고
        # 조건부분과 점수부분을 따로 저장한다
        f_list = fo.split(' ')
        f_non_score = f_list[:-1]
        score = int(f_list[-1])
 
        # 조합을 통해 각 자리에 -가 들어간 테이블을 만든다
        for j in range(5):
            combi = list(combinations(range(4), j))
            for c in combi:
                f_copy = f_non_score[:]
                for i in c:
                    f_copy[i] = "-"
                str_f = ''.join(f_copy)
 
                if str_f in info_dict:
                    info_dict[str_f].append(score)
                else:
                    info_dict[str_f] = [score]
 
    for v in info_dict.values():
        v.sort()
 
    for q in query:
        qry = [i for i in q.split(" "if i != 'and']
        qry_condition = ''.join(qry[:-1])
        qry_score = int(qry[-1])
 
        if qry_condition in info_dict:
            value = info_dict[qry_condition]
            if len(value) > 0:
                start = 0
                end = len(value)
                while start != end:
                    if value[int((start + end) / 2)] >= qry_score:
                        end = int((start + end) / 2)
                    else:
                        start = (int((start + end) / 2+ 1)
            answer.append(len(value) - start)
 
        else:
            answer.append(0)
 
    return answer
 
cs

 

728x90