728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/60060
최종 코드
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)
참고
- 1. 문자열 압축 ->2021.09.05 - [코테 노트/프로그래머스] - Level 2 문자열 압축 <2020 KAKAO BLIND RECRUITMENT > Python 3
- 2. 괄호 변환 ->2021.09.05 - [코테 노트/프로그래머스] - Level 2 괄호 변환 <2020 KAKAO BLIND RECRUITMENT> Python 3
- 3. 자물쇠와 열쇠 ->2021.09.05 - [코테 노트/프로그래머스] - Level 3 자물쇠와 열쇠 <2020 KAKAO BLIND RECRUITMENT> Python 3
- 5. 기둥과 보 설치 -> https://hwayomingdlog.tistory.com/315
- 7. 블록 이동하기 ->
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 행렬 테두리 회전하기 Python 3 (0) | 2022.03.06 |
---|---|
Level 2 튜플 <2019 카카오 인턴십> Python 3 (0) | 2021.09.06 |
Level 3 자물쇠와 열쇠 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2021.09.05 |
Level 2 괄호 변환 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2021.09.05 |
Level 2 문자열 압축 <2020 KAKAO BLIND RECRUITMENT > Python 3 (0) | 2021.09.05 |