알고리즘/자바

[백준 알고리즘] 1463번 자바(Java) 1로 만들기

2023. 9. 30. 12:26
목차
  1. 문제
  2. 입력
  3. 출력
  4. 풀이
  5. 소스코드

조건

문제

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

  1. X가 3으로 나누어 떨어지면, 3으로 나눈다.
  2. X가 2로 나누어 떨어지면, 2로 나눈다.
  3. 1을 뺀다.

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

 

입력

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

 

출력

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

 

풀이

전형적인 특정값에 최소로 도달하는 DP문제이다. 반대로 생각해서 1부터 N까지 도달하는 최소의 과정을 구하면 된다고 생각했다. +1, *2, *3의 방법이 있고 그걸 이용해서 코드를 짜게되면 아래와 같다.그리고 추가로 시간제한은 0.15초로 1500만번, 즉 O(n)복잡도로 풀어야한다. DP는 이걸 충족을 시켜준다추가로 메모리 제한은 128MB인데 약 3000만번 넘는 정수형을 저장할 수 있기에 문제가 되지않는다.(10의 6승은 1000만)

 

 

예제 입력 예시

10

예제 출력 예시

3

10 -> 9 -> 3 -> 1

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//1463번 1로 만들기

public class P1463 {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int dp[] = new int[N+1];
        dp[1] = 0;
        for (int i = 2; i <= N; i++) {
            dp[i] = i;
        }
        //3가지 방법(1더하기, 2곱하기, 3곱하기)
        for (int i = 1; i <=N; i++) {
            if(i+1<=N)  dp[i+1] = Math.min(dp[i+1], dp[i]+1);
            if(i*2<=N) dp[i*2] = Math.min(dp[i*2], dp[i]+1);
            if(i*3<=N) dp[i*3] = Math.min(dp[i*3], dp[i]+1);
        }
        System.out.println(dp[N]);
    }
}

 

 

 

 

문제 출처

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

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

www.acmicpc.net

 

저작자표시 (새창열림)

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

[백준 알고리즘] 1806번 자바(Java) 부분합  (2) 2023.10.02
[백준 알고리즘] 2206번 자바(Java) 벽 부수기  (0) 2023.10.01
[백준 알고리즘] 2096번 자바(Java) 내려가기  (0) 2023.09.30
[백준 알고리즘] 16935번 자바(Java) A → B  (0) 2023.09.13
[백준 알고리즘] 11725번 자바(Java) 트리의 부모 찾기  (0) 2023.08.31
  1. 문제
  2. 입력
  3. 출력
  4. 풀이
  5. 소스코드
'알고리즘/자바' 카테고리의 다른 글
  • [백준 알고리즘] 1806번 자바(Java) 부분합
  • [백준 알고리즘] 2206번 자바(Java) 벽 부수기
  • [백준 알고리즘] 2096번 자바(Java) 내려가기
  • [백준 알고리즘] 16935번 자바(Java) A → B
Ash_jisu
Ash_jisu
JisuStoryAsh_jisu 님의 블로그입니다.
Ash_jisu
JisuStory
Ash_jisu
전체
오늘
어제
  • 분류 전체보기 (136)
    • 알고리즘 (68)
      • 자바 (68)
      • C++ (0)
    • 자바(Java) (18)
    • 스프링 (7)
      • 테스트 (3)
    • 데이터베이스 (3)
      • SQL (7)
      • JPA (1)
      • ElasticSearch (3)
    • CS (3)
    • 배포, 운영 (6)
      • Infra (3)
    • 디자인 패턴 (8)
    • 기타 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • java
  • 프로그래머스 #알고리즘
  • 코딩테스트
  • 자바
  • 백준 #DP
  • Elasticsearch #최적화
  • API테스트 #Postman
  • dp
  • 백준
  • 알고리즘 #bfs
  • Elasticsearch #Testcontainer #Test
  • swea #구현
  • 백준 #BFS
  • 자바 #백준
  • 알고리즘 #다익스트라
  • BFS
  • bfs #알고리즘
  • db
  • 배포
  • 자바 #그리디

최근 댓글

최근 글

hELLO · Designed By 정상우.
Ash_jisu
[백준 알고리즘] 1463번 자바(Java) 1로 만들기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.