[Programmers- LEVEL2] 124나라의 숫자, 기능 개발, 더맵게
123나라의 숫자
https://programmers.co.kr/learn/courses/30/lessons/12899
코딩테스트 연습 - 124 나라의 숫자
programmers.co.kr
초반 코드
def solution(n):
arr = ['1','2','4']
dp = ['0','1','2','4','11', '12', '14', '21', '22', '24', '41', '42','44']
len = 12
k = 4
if(n <= 12):
return dp[n]
else:
while 1:
if len >= n:
return dp[n]
for i in range(3):
dp.append(dp[k]+arr[i])
len = len+1
k = k+1
정확도 테스트는 다 맞았지만, 효율성 테스트에서는 통과 하지 못했다. 아무래도 O(n)으로 하면 n이 500,000,000 일때 최소 5억번의 연산이 이루어져서 그런 것 같다. --> 모든 요소에 대해서 탐색하지 않아도 되는 방법을 찾아야한다.
dp를 쓰지 않고, 그냥 나눗셈만 이용해서 값을 한번에 나올 수 있는 방법을 생각해 냈다.
def solution(n):
arr = ""
while 1:
if(n<1):
break
if n%3 == 0:
arr = arr + '4'
elif n%3 == 1:
arr = arr + '1'
else:
arr = arr + '2'
n = (n-1)//3
return arr[::-1]
내 힌트 풀이는 다음과 같다.
기능 개발
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
import math
def solution(progresses, speeds):
day = []
for i in range(len(progresses)):
day.append(math.ceil((100 - progresses[i])/speeds[i]))
prev = day[0]
cnt = 0
answer = []
for k in day:
if prev < k:
prev = k
answer.append(cnt)
cnt = 1
else:
cnt = cnt + 1
answer.append(cnt)
return answer
문제가 너무 직관적이라 다로 풀이는 안적는다.
더 맵게
https://programmers.co.kr/learn/courses/30/lessons/42626?language=python3
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
import heapq
def solution(scoville, K):
q = []
for i in scoville:
heapq.heappush(q, i)
count = 0
while q[0]<K:
if len(q) == 1:
return -1
a = heapq.heappop(q)
b = heapq.heappop(q)
c = a+(b*2)
count = count+1
heapq.heappush(q,c)
return count
이문제도 직관적으로 풀 수 있다. python의 heapq라는 기능만 안다면 바로 풀 수 있는 문제이다.