코테 노트/프로그래머스

Level 4 가사 검색 <2020 KAKAO BLIND RECRUITMENT> Python 3

화요밍 2021. 9. 6. 00:02
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/60060

 

코딩테스트 연습 - 가사 검색

 

programmers.co.kr

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

from bisect import bisect_left, bisect_right
from collections import defaultdict

def get_range(start, end, lst):
    left = bisect_left(lst, start)
    right = bisect_right(lst, end)
    return right - left

def solution(words, queries):
    answer = []
    word_dict = defaultdict(list)
    rvs_word_dict = defaultdict(list)
    
    for w in words:
        word_dict[len(w)].append(w)
        rvs_word_dict[len(w)].append(w[::-1])
        
    for key in word_dict.keys():
        word_dict[key].sort()
        rvs_word_dict[key].sort()
        
    for q in queries:
        if q[0] == '?':
            q = q[::-1]
            start, end = q.replace('?', 'a'), q.replace('?', 'z')
            lst = rvs_word_dict[len(q)]
        else:
            start, end = q.replace('?', 'a'), q.replace('?', 'z')
            lst = word_dict[len(q)]
        answer.append(get_range(start, end, lst))
            
    return answer

풀이 과정

from bisect import bisect_left, bisect_right
from collections import defaultdict

def get_range(start, end, lst):
    left = bisect_left(lst, start)
    right = bisect_right(lst, end)
    return right - left

def solution(words, queries):
    answer = []
    word_dict = defaultdict(list)
    rvs_word_dict = defaultdict(list)
    
    for w in words:
        word_dict[len(w)].append(w)
        rvs_word_dict[len(w)].append(w[::-1])
        
    for key in word_dict.keys():
        word_dict[key].sort()
        rvs_word_dict[key].sort()
        
    for q in queries:
        if q[0] == '?':
            q = q[::-1]
            start, end = q.replace('?', 'a'), q.replace('?', 'z')
            lst = rvs_word_dict[len(q)]
        else:
            start, end = q.replace('?', 'a'), q.replace('?', 'z')
            lst = word_dict[len(q)]
        answer.append(get_range(start, end, lst))
            
    return answer

오답 노트

  • 정확성만 통과한 풀이

풀이 시간 6분

def solution(words, queries):
    answer = []
    for q in queries:
        cnt = 0
        for w in words:
            if len(q) != len(w): continue
            for qq, ww in zip(q, w):
                if qq == "?" or qq == ww: continue
                else: break
            else: cnt += 1
        answer.append(cnt)
    return answer

정확성만 통과한 풀이 결과

 3번 문제에서 시간을 너무 뺏겨서 시험 종료까지 20분 남은 시점에서 이 문제를 풀기로 선택했다.

급한 대로 정확성이라도 통과하자는 마음으로 후다닥 풀어서 6분만에 정확성을 통과할 수 있었다.

남은 14분동안 효율성을 고려해서 문제를 풀어보다가 시험이 끝났다.

결국, 혼자 모의로 진행한 2020 카카오 블라인드 채용 코딩 테스트는 이 문제의 정확성만 통과한 것까지 3.5솔을 하게 됐다.

더 노력해서 안정적으로 코딩 테스트에 통과할 수 있었으면 좋겠다!! 할 수 있다 나자신 화이팅!!!!!

 

  • 2번째 시도
from collections import defaultdict, deque
def solution(words, queries):
    answer = deque()
    keywords = defaultdict(int)
    for q in queries:
        if q in keywords: 
            answer.append(keywords[q])
            continue
        front = True if q[0] == '?' else False
        key = q.replace('?','')
        wild_len = len(q) - len(key)
        cnt = 0
        if front:
            for w in words:
                if len(w) != len(q): continue
                if w.endswith(key): cnt += 1
        else:
            for w in words:
                if len(w) != len(q): continue
                if w.startswith(key): cnt += 1
        keywords[q] = cnt
        answer.append(cnt)
    return list(answer)

2번째 시도 결과


참고

 

Level 3 기둥과 보 설치 <2020 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/60061?language=python3 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0..

hwayomingdlog.tistory.com

 

Level 3 외벽 점검 <2020 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/60062?language=python3# 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기..

hwayomingdlog.tistory.com

  • 7. 블록 이동하기 -> 
728x90
반응형