프로그래머스 | 2018 KAKAO BLIND RECRUITMENT | [1차] 캐시 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def solution(cacheSize, cities): cache = [] # 캐시 time = 0 # 총 실행시간 if cacheSize > 0: for city in cities: city = city.lower() if city in cache: # 캐시에 존재할 때(cache hit) 최근 위치로 갱신 cache.remove(city) cache.append(city) cache = cache[-cacheSize:] time += 1 else: # 캐시에 존재하지 않으면(cache miss) ..
프로그래머스 | H-index [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def solution(citations): for h in range(max(citations), 0, -1): # h(범위: 최대 인용 횟수부터 1까지) '역순' 순회 count = 0 # h번 이상 인용된 논문 수 for c_num in citations: if h = h: # 가장 먼저 h번 이상 인용된 논문수가 h번 이상이면 리턴 return h return 0 논문 n 편 중, h번 이상 인용된 논문이 h 편 이상이 될 수 있는 h의 최댓값을 구해야 하는 문제이다. 먼저 문제 이해를 위해 필기..
프로그래머스 | 점프와 순간 이동 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 코드def solution(n): answer = 0 while n > 0: if n % 2 == 0: # 짝수이면 //2 n = n // 2 else: # 홀수이면 -1 n = n - 1 answer += 1 # -1 하는 횟수가 답 return answer문제를 보자마자 그리디 유형이 아닐까.. 하고 생각했다. 순간이동의 횟수를 최대로 해야 건전지 사용량이 최소가 될 수 있기 때문에 어떻게 순간이동의 횟수를 최대화하느냐가 관건이었다. 하지만 주어진 예시를 봐도 기준을 잘 모르겠어서 힌트를 찾아 인터넷 세상을 ..
프로그래머스 | 피보나치 수 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 시도한 코드 import sys sys.setrecursionlimit(10**6) def fibo(x): if x == 0: return 0 elif x == 1: return 1 else: return fibo(x-1) + fibo(x-2) def solution(n): return fibo(n) % 1234567 문제 이름을 보자마자 피보나치 함수 정도는 쉽게 구현할 수 있지!라고 생각했지만 결과는 처참했다. 런타임 에러도 아닌 시간초과를 맞닥뜨려 너무나 당황스러웠다. 어떻게 해결해야 할지 하나도 ..
프로그래머스 | 숫자의 표현 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def solution(n): answer = 0 # 연속된 자연수로 n을 표현하는 방법의 수 for i in range(1, n+1): hap = 0 # hap이 n보다 크거나 같아질 때까지 i부터 순차적으로 더함 while hap < n: hap += i i += 1 if hap == n: # 만약 hap이 n과 같으면 연속된 자연수로 나타낼 수 있으므로 방법 +1 answer += 1 return answer 자연수 n을 연속된 자연수로 표현할 수 있는 가짓수를 구하는 문제이다. 예를 들어, n=1..
프로그래머스 | 최솟값 만들기 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 시도한 코드 def solution(A,B): answer = 0 for i in range(len(A)): a = A.pop(A.index(min(A))) b = B.pop(B.index(max(B))) answer += a * b return answer 두 배열에서 뽑은 각각의 원소의 곱의 누적합이 최소가 되는 경우의 값을 구해야 하는 문제이다. 문제의 예시를 보며 한쪽 리스트에서는 최솟값을 순서대로 고르고, 다른 쪽 리스트에서는 최댓값을 순서대로 고르는 경우가 정답이라고 생각하게 되었다. 그래서 ..