일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- astreisk
- 또 2시네
- activation_function
- O(logN)
- 멋쟁이사자처럼부트캠프
- 다 쓰고보니깐
- 5기
- 자동_형변환
- 멋사
- 정렬
- 알고리즘
- 몰라 뭐가 너무 많아졌어
- 백준
- 23883
- 데이터분석
- 파이썬
- comprehesion
- jupyter_notebook
- ELU
- 난 분명히 1시에 잘 생각이었는데
- 멋쟁이사자처러후기
- root_directory
- 다 쓰고 보니깐 1시 반이야
- 멋쟁이사자처럼후기
- TDB
- BOJ
- 선택정렬
- 또 2시야....
- 2시야
- Python
Archives
- Today
- Total
유사개발자 샤이와 무지
1로 만들기 [dynamic Programming] #이것이 코딩테스트다 본문
[문제] 1로 만들기: 문제 설명
정수 X가 주어질때 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지이다.
1) X가 5로 나누어떨어지면, 5로 나눈다.
2) X가 3으로 나누어 떨어지면, 3으로 나눈다.
3) X가 2로 나누어 떨어지면, 2로 나눈다.
4) X에서 1을 뺀다.
정수 X가 주어졌을때, 연산 4개를 적절히 사용해서 1을 만들려고 한다.연산을 사용하는 횟수의 최솟값을 출력하시오.
예를 들어, 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값이다.
26 - 1 = 25
25 / 5 = 5
5 / 5 = 1
난이도: ●◐○| 풀이시간 20m | 시간제한 1초 | 메모리 128mb
<input case>
첫째 줄에 정수 X이 주어진다. (1<=X<=30,000)
<Output case>
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
input example | Output example |
26 | 3 |
<Idea>
Q1. 응어어엄ㅁ어ㅓㅁㅇ머 이게 뭐야 이게 규칙성이 있나?
A 정신차려 친구 다이나믹 프로그래밍은 그리디 알고리즘의 연장선이야 작은 수부터 천천히 해결해나가면 되는거야
Q2. 아 맞아 그럼 작은 수부터 천천히 계산 -> 리스트에 넣기를 반복해나가면 되는거였지
A. 그치 쉬운 문제니까 천천히 해보자
x=int(input())
d=[0]*(x+2)
for i in range(1,x+1):
d[i]=d[i-1]+1
if not x%2: d[i]=min(d[i], d[i//2] + 1)
if not x%2: d[i]=min(d[i], d[i//3] + 1)
if not x%5: d[i]=min(d[i], d[i//5] + 1)
print(d[x])
'WIL > algorithm' 카테고리의 다른 글
바닥공사 [dynamic Programming] #이것이 코딩테스트다 (0) | 2023.04.25 |
---|---|
개미 전사 [dynamic Programming] #이것이 코딩테스트다 (0) | 2023.04.25 |
떡볶이 떡 만들기 [Binary_Search] - 2 #이것이 코딩테스트다 (0) | 2023.04.25 |
떡볶이 떡 만들기 [Binary_Search] - 1 #이것이 코딩테스트다 (0) | 2023.04.25 |
부품 찾기 [Binary_Search] #이것이 코딩테스트다 (0) | 2023.04.25 |
Comments