Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 동적계획법과최단거리역추적
- cos pro 1급
- 백준
- 개발
- 코딩테스트
- Vue
- BAEKJOON
- 안드로이드스튜디오
- 알고리즘
- 분할정복
- codingtest
- 파이썬
- 안드로이드
- vuejs
- DART
- Algorithm
- 코드품앗이
- AndroidStudio
- DFS
- issue
- DFS와BFS
- cos
- 코테
- C++
- 동적계획법
- Flutter
- Python
- android
- django
- cos pro
Archives
- Today
- Total
Development Artist
[COS Pro 1급, Python] 5차 9번 : 몇번 연산을 해야 하나요 본문
728x90
반응형
문제 유형
코딩
난이도
hard
Note
1. DP 문제. 2*N 타일링 문제. <- 사실 이 문제라는 것을 파악하는게 핵심. DP문제 많이 푸는 연습만이 살길...
2. dp 배열. 인덱스는 target 수를 의미.
3. 1을 더하는 연산, 1을 빼는 연산, 2를 곱하는 연산을 수행하면서 dp 배열의 target 값에 최솟값을 저장.
Code
# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
#DP 2*n+1 타일링
def solution(number, target):
dp = [-1]*(2*target+1)
for i in range(1, number+1):
dp[i] = number - i
dp[i*2] = dp[i] + 1
dp[number+1] = 1
for i in range(number+2, target+1):
min_num = min(dp[i-1]+1, dp[i//2]+1) if (i % 2 == 0) and (i//2 >= number) else dp[i-1]+1
if dp[i+1] != -1:
min_num = min(min_num, dp[i+1]+1)
if dp[i] != -1:
min_num = min(min_num, dp[i])
dp[i] = min_num
dp[i*2] = min_num+1
print(dp)
return dp[target]
number1 = 5
target1 = 9
ret1 = solution(number1, target1)
print("solution 함수의 반환 값은", ret1, "입니다.")
number2 = 3
target2 = 11
ret2 = solution(number2, target2)
print("solution 함수의 반환 값은", ret2, "입니다.")
※ 가끔 코드 중 print(~)가 있습니다. 정리 못한 점 죄송합니다.
728x90
반응형
'Algorithm > COS' 카테고리의 다른 글
[COS Pro 1급, Python] 6차 1번 : 꽃피는 봄이 언제 오나요 (0) | 2022.02.28 |
---|---|
[COS Pro 1급, Python] 5차 10번 : 계산기만들기 (0) | 2022.02.28 |
[COS Pro 1급, Python] 5차 8번 : 공약수 구하기 (0) | 2022.02.28 |
[COS Pro 1급, Python] 5차 7번 : 그래프에서 싸이클 찾기 (0) | 2022.02.28 |
[COS Pro 1급, Python] 5차 6번 : p진법 to q진법 (0) | 2022.02.28 |
Comments