Skip to content

Commit

Permalink
[Silver III] Title: 1로 만들기, Time: 124 ms, Memory: 19056 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
dukbong committed Jan 29, 2024
1 parent bc03b25 commit 4d6fffc
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
59 changes: 59 additions & 0 deletions 백준/Silver/1463. 1로 만들기/1로 만들기.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class Main {

int[] dist;
boolean[] visited;

public static void main(String[] args) throws Exception {
new Main().solution();
}

public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
dist = new int[num + 1];
visited = new boolean[num + 1];
search(num);
}

private void search(int num) {
Queue<Integer> q = new LinkedList<>();
q.offer(num);
visited[num] = true;

while(!q.isEmpty()){
int now = q.poll();

if(now == 1){
System.out.println(dist[1]);
return;
}

int next = now;
for(int i = 0; i < 3; i ++){
switch(i){
case 0: if(now % 3 == 0) next = now / 3;
break;
case 1: if(now % 2 == 0) next = now / 2;
break;
case 2: next = now - 1;
break;
}

if(next != now){
if(!visited[next] && next >= 1){
q.offer(next);
visited[next] = true;
dist[next] = dist[now] + 1;
}
}
}
}
}

}
36 changes: 36 additions & 0 deletions 백준/Silver/1463. 1로 만들기/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# [Silver III] 1로 만들기 - 1463

[문제 링크](https://www.acmicpc.net/problem/1463)

### 성능 요약

메모리: 19056 KB, 시간: 124 ms

### 분류

다이나믹 프로그래밍

### 제출 일자

2024년 1월 29일 12:54:47

### 문제 설명

<p>정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.</p>

<ol>
<li>X가 3으로 나누어 떨어지면, 3으로 나눈다.</li>
<li>X가 2로 나누어 떨어지면, 2로 나눈다.</li>
<li>1을 뺀다.</li>
</ol>

<p>정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.</p>

### 입력

<p>첫째 줄에 1보다 크거나 같고, 10<sup>6</sup>보다 작거나 같은 정수 N이 주어진다.</p>

### 출력

<p>첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.</p>

0 comments on commit 4d6fffc

Please sign in to comment.