Notice
Tags
- Java
- Personal_Study
- Image_classification
- Unix_System
- 리눅스마스터2급
- cloud_computing
- 자격증
- kubeflow
- Univ._Study
- datastructure
- app
- Artificial_Intelligence
- Algorithm
- Operating_System
- 티스토리챌린지
- programmers
- study
- Linux
- tensorflow
- codingTest
- Python
- Android
- 오블완
- C
- Database_Design
- Kubernetes
- c++
- Baekjoon
- 2023_1st_Semester
- SingleProject
코딩 기록 저장소
[백준/Java] 1463번: 1로 만들기 본문
문제 정보
제목 : 1로 만들기
번호 : 1463번
사용 언어 : Java
문제 링크
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
시간 제한 | 메모리 제한 |
0.15 초 (하단 참고) | 128 MB |
문제
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
입력
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
출력
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
입출력 예제

나의 풀이
배열을 생성하여 연산의 횟수를 구하면 바로 해당 배열에 저장할 수 있도록 했습니다. N가지 반복하는 for루프를 생성하여 3가지의 경우를 나타냈습니다. 1을 더한 경우로 dp[i]에 dp[i-1]+1을 저장했습니다. 그리고 if문을 이용해 i를 2로 나눌 수 있고 1을 구한 경우보다 값이 작다면 dp[i]에 dp[i/2]+1을 저장했습니다. 다른 if문을 이용해3또한 2와 비슷하게 처리했습니다. 반복이 끝나면 dp[N]에 해당하는 값을 출력합니다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[N+1];
dp[1] = 0;
for(int i =2; i <= N;i++) {
dp[i] = dp[i-1] +1; // 1을 더한 경우
if (i%2 ==0 && dp[i] > dp[i/2]+1) { // i를 2로 나눌 수 있고 1을 더한 경우보다 값이 작은 경우
dp[i] = dp[i/2]+1;
}
if (i%3 ==0 && dp[i] > dp[i/3]+1) { // i를 3으로 나눌 수 있고 1을 더한 경우보다 값이 작은 경우
dp[i] = dp[i/3]+1;
}
}
bw.write(dp[N]+"\n");
bw.flush();
bw.close();
br.close();
}
}
'백준 > 동적 계획법 1' 카테고리의 다른 글
[백준/Python] 9461번 : 파도반 수열 (0) | 2023.07.10 |
---|---|
[백준/Java] 2579번: 계단 오르기 (0) | 2023.05.26 |