티스토리 뷰
728x90
https://www.acmicpc.net/problem/1463
동적계획법 C++
문제는 위에 사진 참고 (설명 매우 귀찮다 딱히 요약할 것도 없응께)
N의 범위는 1부터 10^6 까지
접근방법
n개의 정수 배열을 사용한다. 배열에는 해당 수가 1이 되는데에 필요한 연산의 최소 횟수가 저장된다.
1: 0회, 2: 1회, 3: 1회까지 미리 저장해두고
4부터는 [ 1을 뺀 수의 연산 최소횟수 + 1 , 3으로 나눈 값의 연산 최소횟수 + 1 (3으로 나누어질때만), 2로 나눈 값의 연산 최소횟수 + 1 (2로 나누어질때만) ] 이 중 가장 작은 값을 해당 인덱스의 배열에 저장한다.
(설명 진짜 못해먹겠음)
이제 DP에 적응한 것 같다. 빨리 푼다.
처음에 한 번 틀렸는데 1에 1저장해서.. 1이 1이되려면 연산횟수는 0..나처럼 멍청한짓 하는 사람 없겠지
소스코드
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int results[n+1];
results[1] = 0;
results[2] = 1;
results[3] = 1;
for(int i = 4; i <= n; i++){
results[i] = results[i-1]+1;
if(i % 3 == 0){
results[i] = min(results[i], results[i/3]+1);
}
if(i % 2 == 0){
results[i] = min(results[i], results[i/2]+1);
}
}
cout << results[n];
return 0;
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 11053] 알고리즘 45일차 : 가장 긴 증가하는 부분 수열 (0) | 2020.08.17 |
---|---|
[백준 2156] 알고리즘 44일차 : 포도주 시식 (0) | 2020.08.14 |
[백준 2579] 알고리즘 42일차 : 계단 오르기 (0) | 2020.08.12 |
[백준 1932] 알고리즘 41일차 : 정수 삼각형 (0) | 2020.08.11 |
[백준 1874] 알고리즘 39일차 : 스택 수열 (0) | 2020.08.07 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BFS
- 백트래킹
- dp
- 백준
- dfs
- 트리
- 파이썬
- 토마토
- 이분탐색
- 게임이론
- 동적계획법
- 웹크롤링
- 다이나믹프로그래밍
- 우선순위큐
- Stack
- c++
- 알고리즘
- 프로그래머스
- 수학
- 투포인터
- 최단경로
- 정렬
- 스택
- 최대힙
- 그리디알고리즘
- 브루트포스
- Swift
- 최소힙
- 자바
- 문자열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함