Coding Test/programmers
lv2 풀이 day2
210B
2023. 3. 4. 12:50
점프와 순간 이동
def solution(n):
ans = 0
def dp(k):
if k == 1 or k ==2:
return 1
else:
return min(dp(k-1)+1, dp(k//2)+k%2)
return dp(n)
테케 두개 중 하나가 recursion error가 났다.
def solution(n):
value = [0] * (n+1)
def dp(k, value):
if k == 1:
return 1
elif k == 2:
return 1
else:
return min(value[k-1]+1, value[k//2]+k%2)
for i in range(1, n+1):
value[i] = dp(i, value)
return value[n]
이렇게 수정해서 테스트 결과는 바르게 나왔지만 효율성 테스트에서 실패했다.
def solution(n):
ans = 1
while(n>2):
if n%2 == 0:
n = n//2
else:
n = n-1
ans += 1
return ans
이 코드는 통과함
[1차]캐시 2018 KAKAO BLIND RECRUITMENT
from collections import deque
def solution(cacheSize, cities):
answer = 0
cache = deque()
for i in range(len(cities)):
city = cities[i].upper()
if city in cache:
cache.remove(city)
answer += 1
elif len(cache) < cacheSize:
answer += 5
else:
cache.popleft()
answer += 5
cache.append(city)
return answer
cacheSize가 0인 경우를 고려해주지 않아서 틀렸다.
from collections import deque
def solution(cacheSize, cities):
answer = 0
cache = deque()
if cacheSize == 0:
return len(cities)*5
for i in range(len(cities)):
city = cities[i].upper()
if city in cache:
cache.remove(city)
answer += 1
elif len(cache) < cacheSize:
answer += 5
else:
cache.popleft()
answer += 5
cache.append(city)
return answer
튜플 2019 카카오 개발자 겨울 인턴십
def solution(s):
answer = []
s = s[2:-2]
s = s.split("},{")
s.sort(key = len)
for i in s:
ii = i.split(',')
for j in ii:
if int(j) not in answer:
answer.append(int(j))
return answer
리스트 길이 순서대로 정렬 s(key = len) 해준 뒤 answer 리스트에 append 해준다.
[1차] 뉴스 클러스터링 2018 KAKAO BLIND RECRUITMENT
import math
def solution(str1, str2):
str1 = list(str1.upper())
str2 = list(str2.upper())
s1 = []
s2 = []
for i in range(len(str1)-1):
if str1[i].isalpha() == True and str1[i+1].isalpha() == True:
s1.append(str1[i]+str1[i+1])
for i in range(len(str2)-1):
if str2[i].isalpha() == True and str2[i+1].isalpha() == True:
s2.append(str2[i]+str2[i+1])
cnt = 0
if not s1 and not s2:
return 65536
for i in range(len(s1)):
if s1[i] in s2:
cnt += 1
s2.remove(s1[i])
answer = cnt / (len(s1) + len(s2)) * 65536
return int(answer)
교집합 합집합 조건을 잘 보고 두 집합이 각각 0인 경우 zero division이 일어나기 때문에 따로 자카드 유사도를 0으로 처리해주어야 했다. 또한 중복 원소가 일대일 대응 형식으로 되기 때문에 그 부분도 오류가 나서 고쳐야 했다.
최솟값 만들기
def solution(A,B):
sum = 0
A.sort()
B.sort()
for i in range(len(A)):
sum += A[i]*B[len(A)-i-1]
return sum
숫자의 표현
def solution(n):
answer = 0
for i in range(1,n+1):
if (2*n-i*i+i)%(2*i) == 0 and n/i > (i-1)/2:
answer += 1
return answer
피보나치 수
def solution(n):
s = [0]*(n+1)
s[1] = 1
for i in range(2,n+1):
s[i] = (s[i-1]+s[i-2])%1234567
return s[n]
정수 삼각형
카카오 코테 너무 어려운데 레벨 파괴자 아닌지... 레벨 좀 제대로 나눠주세요 @프로그래머스