티스토리 뷰

알고리즘/Baekjoon

백준 1463: 1로 만들기 (C++)

개발하는 크롱 2020. 11. 25. 10:46
반응형

문제 링크: www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

 

2~1000000까지 1로 만드는 최소 연산 횟수를 먼저 계산한다.

작은 수에 대해서 먼저 계산하고 그 값을 저장해 재활용함으로써 불필요한 연산을 줄일 수 있다.

 

#include <cstdio>
#include <algorithm>
using namespace std;

#define MAX 1000001

int arr[MAX]; //1로 만드는 연산 횟수 저장

void count() {
	for (int i = 2; i <= MAX; ++i) {
		arr[i] = arr[i - 1] + 1;
		if (i % 2 == 0) arr[i] = min(arr[i], arr[i / 2] + 1);
		if (i % 3 == 0) arr[i] = min(arr[i], arr[i / 3] + 1);
	}
}

int main() {
	int in;
	count();
	scanf("%d", &in);
	printf("%d", arr[in]);
}
반응형

'알고리즘 > Baekjoon' 카테고리의 다른 글

백준 2098: 외판원 순회 (C++)  (0) 2020.11.25
백준 1662: 압축 (C++)  (0) 2020.11.25
백준 1398: 동전 문제 (C++)  (0) 2020.11.25
백준 1918: 후위 표기식 (C++)  (0) 2020.11.22
백준 4949: 균형잡힌 세상 (C++)  (0) 2020.11.21
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함