일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준9단계
- 다이나믹 프로그래밍
- ☆
- 알고리즘공부
- Java개념
- 자바의정석연습문제
- 백준단계별로풀어보기
- 백준알고리즘
- dfs
- 백준자바
- 개발공부
- 자바공부
- 무료개발강의
- 동적계획법
- java
- dp
- 알고리즘
- 백트래킹
- BFS
- 자바의정석연습문제풀이
- 자바의정석
- 브루트포스
- 코딩공부
- 자바
- 자바개념
- 무료코딩강의
- 시간 복잡도
- 백준
- 빅오 표기법
- ★
- Today
- Total
더 많이 실패하기
백준 1463번 1로 만들기 자바 Java (☆공부 259일차) 본문
1463 1로 만들기
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
백준 1463번 문제 1로 만들기
문제
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
0.15 초 (하단 참고) | 128 MB | 252235 | 84145 | 53744 | 32.502% |
문제
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
입력
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
출력
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
예제 입력 1
2
예제 출력 1
1
예제 입력 2
10
예제 출력 2
3
힌트
10의 경우에 10 → 9 → 3 → 1 로 3번 만에 만들 수 있다.
과정 생각해보기
https://gimbalja.tistory.com/206
공부 120일차: 백준1463번 1로 만들기 자바 java
1463 1로 만들기 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 백준 1463번 문제 1로 만들기 문제 과정 생각해보기
gimbalja.tistory.com
4달 전에 푼 문제

2부터 10까지 구해보면서, 어떤 공통점이 있는지 도출해내야 한다
그전수의 최소값에 1을 더하거나(-1한 것) 3이나 2로 나눈 몫에 1을 더하거나(나눈 연산) 하면 된다는 규칙이 보인다
1. dp[] 점화식
2. 재귀 메서드
이전에 1번으로 풀어봤으니 2번으로 해보기로 했다
실제로 재귀 메서드를 이용하는 게 메모리와 시간 두 측면에서 더 낫다
정답 인정 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
System.out.println(recursion(n, 0));
}
// 재귀
static int recursion(int n, int count) {
if(n < 2) {
return count;
}
// n%2 혹은 n%3 -> -1하는 횟수와 같다
return Math.min(recursion(n/2, count+1+n%2), recursion(n/3, count+1+n%3));
}
}
|
cs |

'알고리즘 > 백준' 카테고리의 다른 글
백준 11727번 2xn 타일링 2 Java (☆공부 261일차) (0) | 2023.04.17 |
---|---|
백준 11726번 2xn 타일링 Java (☆공부 260일차) (0) | 2023.04.16 |
백준 11653번 소인수분해 자바 Java (☆공부 258일차) (0) | 2023.04.14 |
백준 11576번 Base Conversion 자바 Java (☆공부 257일차) (0) | 2023.04.13 |
백준 2745번 진법 변환 자바 Java (☆공부 256일차) (0) | 2023.04.12 |