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]

정수 삼각형

 

 

 

 

 

 

카카오 코테 너무 어려운데 레벨 파괴자 아닌지... 레벨 좀 제대로 나눠주세요 @프로그래머스