[프로그래머스] 순위 검색 (python 파이썬)

에딕·2021년 5월 7일
0

프로그래머스

목록 보기
10/16
post-thumbnail

👉 순위 검색



✍ 내 코드 (효율성 미통과 코드)


# 2020 KAKAO BLIND RECRUITMENT  순위 검색
from collections import defaultdict
from bisect import bisect_left


def solution(info, query):
    dic = defaultdict(
        lambda: defaultdict(
            lambda: defaultdict(
                lambda: defaultdict(list),
            ),
        ),
    )

    for item in info:
        item = item.split()
        dic[item[0]][item[1]][item[2]][item[3]].append(int(item[4]))

    def score_check(d, q):
        result = 0
        d.sort()
        return len(d) - bisect_left(d, int(q[4]))

    def pc_check(d, q):
        if q[3] == "-":
            result = 0
            for k in d.keys():
                result += score_check(d[k], q)
            return result
        else:
            return score_check(d[q[3]], q)

    def js_check(d, q):
        if q[2] == "-":
            result = 0
            for k in d.keys():
                result += pc_check(d[k], q)
            return result
        else:
            return pc_check(d[q[2]], q)

    def bf_check(d, q):
        if q[1] == "-":
            result = 0
            for k in d.keys():
                result += js_check(d[k], q)
            return result
        else:
            return js_check(d[q[1]], q)

    def language(d, q):
        if q[0] == "-":
            result = 0
            for k in dic.keys():
                result += bf_check(d[k], q)
            return result
        else:
            return bf_check(d[q[0]], q)

    result = []
    for st in query:
        q = st.split(" and ")
        temp = q[-1].split(" ")
        q[-1] = temp[0]
        q.append(temp[1])
        result.append(language(dic, q))

    return result

✍ 내 코드 (통과 코드)


# 2020 KAKAO BLIND RECRUITMENT  순위 검색
from collections import defaultdict
from itertools import product
from bisect import bisect_left


def solution(info, query):
    dic = defaultdict(list)

    for item in info:
        item = item.split()
        slot = []
        for i in range(4):
            slot.append({"-", item[i]})
        for i in product(*slot):
            dic["".join(i)].append(int(item[4]))

    for k in dic.keys():
        dic[k].sort()

    result = []
    for q in query:
        q = q.replace(" and ", " ").split(" ")
        score = int(q[-1])
        q = q[:-1]

        t = dic["".join(q)]
        result.append(len(t) - bisect_left(t, score))

    return result


✍ 팁

  • 모든 경우의 조건으로 dictionary에 key로 저장
  • bisect를 이용하여 lowerbound 개념을 사용

👉 잡담

처음 풀때는 완전 구조를 완벽히 짜서 풀었는데 아무래도 재귀 같은 부분과 구조를 다 거쳐가기 때문에 시간초과에 걸렸던거라 생각한다.

profile
코딩💻 고양이😺

0개의 댓글

관련 채용 정보