728x90
아까 못 풀었던 3번 문제를 풀었네요....
3번 문제는 문자열이 연속되게 K번 이상 나오면 0을 출력
아니면 1을 출력하는 문제입니다.
rep = ["AFFDEFDEFDEEC", "ABABABABBCCEF", "FFFFFFFFFFFFF", "FCBBBFCBBECBB"] # [0, 0, 0, 1]
n = 3
k = 2
이렇게 주어질 경우 [0, 0, 0, 1]을 출력하죠,,
FCBBBFCBBECBB
같은 경우 FCBB가 K번 이상 나오지만 연속적으로 나오지 않으므로 1을 출력합니다
다른 경우로 따져봐도 연속으로 나오는 문자열이 없습니다.
저는 LRU와 딕셔너리를 조합해서 문제를 풀었습니다.
- 알고리즘 띵킹 -
캐시 사이즈를 n값을 놓습니다
캐시 사이즈는 LRU를 구현입니다. 그러면 N만큼 범위 내에서 같은 단어가 나오면 캐시에 안에 있는 문자열은 계속 살아남게 되죠 => 즉, 캐시로 연속을 구현한 것입니다.
그리고 캐시 안에 값이 있으면 dic[문자열] += 1 해주고 처음 나오면 dic[문자열] = 1을 해주는 식으로 처리합니다.
이렇게 순회하면서 dic value값이 k이상이 나오면 더 이상 순회를 종료하고 0을 리턴하면 되는 거죠...
코드를 보는 게 더이해가 빠르실 수 있습니다.
[ 코드 ]
from collections import deque
def solution(replies, n, k):
answer = [1 for _ in range(len(replies))]
index = 0
for rep in replies:
# rep[i: i + num]
for num in range(n, len(rep) // 2):
cache = deque([])
cacheSize = n
dic = {}
isbreak = False
for i in range(0, len(rep)):
x = {key:value for key, value in dic.items() if value >= k}
if x:
print(dic)
answer[index] = 0
isbreak = True
break
print(dic, cache, rep[i: i + num])
if rep[i: i + num] in cache:
cache.remove(rep[i: i + num])
cache.append(rep[i: i + num])
if rep[i: i + num] in dic:
dic[rep[i: i + num]] += 1
else:
if len(cache) >= cacheSize:
strs = cache.popleft()
del dic[strs]
if rep[i: i + num] not in dic:
dic[rep[i: i + num]] = 1
else:
dic[rep[i: i + num]] += 1
cache.append(rep[i: i + num])
if isbreak:
break
index += 1
return answer
rep = ["AFFDEFDEFDEEC", "ABABABABBCCEF", "FFFFFFFFFFFFF", "FCBBBFCBBECBB"] # [0, 0, 0, 1]
n = 3
k = 2
print(solution(rep, n, k))
후기
아쉽네요 이문제를 시간 내에 풀고
sql을 한 문제라도 풀었으면 합격했을 거 같은데
결론적으로 두 문제 다 놓쳤으니
탈락할 거 같습니다.
728x90
'Test' 카테고리의 다른 글
22년도 어떤 시험 코테 - 2번째 문제 2차 후기 (0) | 2022.05.30 |
---|---|
22년도 어떤 인턴 코테 시험 - 2번째 문제 후기 (0) | 2022.05.28 |
SQL 키트 모두 풀기 완료! (0) | 2022.05.17 |
Test 관련 끄적 -(1) (0) | 2022.05.15 |
후기 - 2번을 못풀었지만.. 기억더듬어보면서 풀어봄 (0) | 2022.05.14 |