티스토리 뷰
반응형
[Point] 다이나믹 프로그래밍으로 차근차근 부분해부터 구해나간다
자칫 막막해보일 수 있지만 다이나믹 프로그래밍의 관점에서 곰곰이 공략법만 제대로 짚어내면 쉬운 문제다.
*변수 설명*
N : 입력 변수
DP[x] : x라는 숫자를 1로 만들기 위해 필요한 "최소 연산의 횟수". 1의 경우엔 0번의 연산, 2와 3의 경우엔 1번의 연산이면 충분하고 최종해를 구하기 위한 최소한의 기본해이므로 미리 초기화해준다.
temp : 각각의 연산으로 나온 DP[x]의 값을 미리 저장하는 변수. 이 변수를 DP[x]값과 비교하여 더 작은 값을 DP[x]에 넣어준다
*알고리즘 설명*
D[N] 은 다음 후보 중 가장 작은 값이 될 것이다.
1번 후보. D[N-1] + 1
2번 후보. D[N/2] + 1 (단, N은 2로 나누어 떨어져야 함)
3번 후보. D[N/3] + 1 (단, N은 3으로 나누어 떨어져야 함)
이걸 위한 코드 작성만 해두면 끗 . 쉽다.
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 32 33 34 35 36 37 38 39 40 | #include <stdio.h> #include <stdlib.h> int main(){ int N,i,temp; int* DP; scanf("%d",&N); DP=(int*)malloc(sizeof(int)*(N+1)); DP[1]=0; DP[2]=1; DP[3]=1; for(i=4;i<=N;i++){ DP[i]=DP[i-1]+1; if(i%2==0){ temp=DP[i/2]+1; if(temp<DP[i]){ DP[i]=temp; } } if(i%3==0){ temp=DP[i/3]+1; if(temp<DP[i]){ DP[i]=temp; } } } printf("%d\n",DP[N]); free(DP); return 0; } | cs |
반응형
'개인 서재..* > 문제풀이' 카테고리의 다른 글
백준 1003번 문제. 피보나치 (0) | 2017.06.05 |
---|---|
백준 2110번 문제. 공유기 설치 (0) | 2017.06.01 |
백준 2346번 문제. 풍선 터뜨리기 (0) | 2017.05.22 |
백준 1005번 문제. ACM Craft (0) | 2017.05.19 |
백준 4963번 문제. 섬의 개수 (0) | 2017.05.18 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 겨드랑이 지방종
- 겨드랑이 초음파
- 타르코프 스파 투어
- 친구들호캉스
- 사마귀광고 제거
- 구글애드센스 광고차단
- 드럼세탁기 고장
- 4E표시
- 스파투어 파트4
- 스텐팬 세척
- 겨울철 동파
- 자취 집들이
- 싱크대 단수
- 자취요리
- 스시이마
- 아난티앳강남
- 타르코프 스파 관광
- 물이 안나와요
- 마민재쉐프
- 스텐팬 탄 자국
- 혐오광고 제거
- 급수에러
- 스텐팬 갈변
- 스파 파트 4
- 겨드랑이 혹
- 건강검진 겨드랑이
- 스파관광 파트4
- 초간단 샤브샤브
- 스텐팬 갈색
- 구글애드센스 혐오광고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함