[백준 18186번] 라면 사기 (Large)
N,B,C = map(int,input().split()) A = [*map(int,input().split())] if B A[i] and A[i+1]>A[i+2]: MIN = min(A[i],A[i+1]-A[i+2]) cost += MIN*(B+C) A[i] -= MIN A[i+1] -= MIN continue MIN = min(A[i],A[i+1],A[i+2]) cost += MIN*(B+C*2) A[i] -= MIN A[i+1] -= MIN A[i+2] -= MIN print(cost) 라면 사기 small [백준 18185번] 라면 사기 (Small) (tistory.com) 의 확장버전이다. 라면 사기 small과 풀이 자체는 완전히 똑같다. 3,5,7을 B,B+C,B+2C로 나타냈을 뿐이다...
[백준 1214번] 쿨한 물건 구매 (Python3)
D,P,Q = map(int,input().split()) P,Q = max(P,Q),min(P,Q) MIN = 1e10 for i in range(min(D//P,Q)+1): MIN = min(MIN,(Q-(D-P*i)%Q)%Q) MIN = min(MIN,(P-(D%P))%P) print(D+MIN) 재미있는 문제였다. 코드를 보면 알다싶이 매우 간단하게 구현 가능하지만, 아이디어를 떠올리는데 약간의 고민이 필요했다. 알고리즘을 설명하면, 1. 더 큰 수를 P, 더 작은 수를 Q로 둔다. 2. P를 한개도 안낼 때의 금액부터, 한개 낼때, 두개 낼때... 를 for문으로 돌려 지불 가격의 최솟값을 구한다. 3. 이때 for문은 D//P와 Q 중 더 작은 값까지 돌린다. (Q까지 돌리는 이유는 P를 Q번..
[백준 11440번] 피보나치 수의 제곱의 합 (Python3)
mod = 1000000007 def cal(A,n): if n==1: return A cal2 = cal(A,n//2) if n%2: return multiply(multiply(cal2,cal2),A) return multiply(cal2,cal2) def multiply(A,B): result = [[0]*3 for i in range(3)] for i in range(3): for j in range(3): for k in range(3): result[i][j] += A[i][k]*B[k][j]%mod result[i][j] %=mod return result N = int(input()) if N == 1: print(1) else: matrix = [[2,2,-1],[1,0,0],[0,1,0..