[프로그래머스] 숫자 변환하기 #bfs #level2 #java

2024. 2. 1. 11:18· 알고리즘
반응형

🔴 해당 문제는 자연수 x를

- x에 n을 더합니다
- x에 2를 곱합니다.
- x에 3을 곱합니다.

이 세가지 연산을 통해 y로 변환하는 최소 연산 횟수를 구하는 문제입니다.

 

따라서 최소 연산 횟수를 구하기 위한 bFS로 구현을 하였습니다.

 

import java.util.LinkedList;
import java.util.Queue;

public class ChangeNum {
    public static void main(String[] args) {
        ChangeNum test = new ChangeNum();
        System.out.println(test.solution(2,	5,	4));
    }
    //최단경우의 수를 찾는것이기 때문에 bfs를 이용
    //x가 y로 되기 위한 방법은 최대 x ~ y까지의 경우가 존재하기 때문에 y-x + 1 개의 중복값 판단을 위한 배열 필요
    //x에 대한 계산 결과와 해당 결과에 도달하기 위한 cost를 담는 Class XValueCost 생성
    //Queue에 XValueCost를 담고 +n, *2, *3의 경우를 실행하면서 bfs를 진행한다.
    public int solution(int x, int y, int n) {
        int answer = 0;
        answer = bfs(x, y, n);
        return answer;
    }
    int bfs(int x, int y, int n){
        boolean []checkXValue = new boolean[y-x + 1];
        Queue<XValueCost> queue = new LinkedList<>();
        queue.add(new XValueCost(x, 0));
        checkXValue[0] = true;
        while(!queue.isEmpty()){
            XValueCost xValueCost = queue.poll();
            if(xValueCost.x == y){
                return xValueCost.cost;
            }
            if(xValueCost.x*2 <= y && !checkXValue[xValueCost.x*2 - x]){
                queue.add(new XValueCost(xValueCost.x*2, xValueCost.cost + 1));
                checkXValue[xValueCost.x*2 - x] = true;
            }
            if(xValueCost.x*3 <= y && !checkXValue[xValueCost.x*3 - x]){
                queue.add(new XValueCost(xValueCost.x*3, xValueCost.cost + 1));
                checkXValue[xValueCost.x*3 - x] = true;
            }
            if(xValueCost.x + n <= y && !checkXValue[xValueCost.x + n - x]){
                queue.add(new XValueCost(xValueCost.x + n, xValueCost.cost + 1));
                checkXValue[xValueCost.x + n - x] = true;
            }
        }
        return -1;
    }
    class XValueCost{
        int x;
        int cost;
        XValueCost(int x, int cost){
            this.x = x;
            this.cost = cost;
        }
    }
}
반응형
저작자표시 비영리 변경금지 (새창열림)

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

[프로그래머스] 두 큐 합 같게 만들기 #Level2 #2022 KAKAO TECH INTERNSHIP #Java  (2) 2024.02.22
[프로그래머스] 가장 큰 수 #정렬  (1) 2024.02.16
[JAVA] 데이터 크기별 가장 빠른 정렬  (0) 2023.11.27
로또는 확률로 계산이 가능할까?  (0) 2023.01.06
[백준]소수찾기_1978 #에라토스테네스의 체 #Sieve of Eratosthenes #JAVA  (0) 2022.06.02
'알고리즘' 카테고리의 다른 글
  • [프로그래머스] 두 큐 합 같게 만들기 #Level2 #2022 KAKAO TECH INTERNSHIP #Java
  • [프로그래머스] 가장 큰 수 #정렬
  • [JAVA] 데이터 크기별 가장 빠른 정렬
  • 로또는 확률로 계산이 가능할까?
TaeHuiLee
TaeHuiLee
창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
TaeHuiLee
Developer_TaeHui
TaeHuiLee
  • 분류 전체보기 (228)
    • WEB (71)
    • Java (38)
    • APP (17)
    • 딥러닝 (2)
    • DB (5)
    • 알고리즘 (17)
    • Python (10)
    • AWS (5)
    • Git (8)
    • Docker (13)
    • 창업 (2)
    • Java Script (5)
    • 군집드론 (3)
    • C언어 (1)
    • IT 지식 (16)
    • Rust (1)
    • Tomcat (1)
    • Nginx (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 관상 어플
  • ubuntu
  • axios
  • 도커
  • DB
  • python
  • Java
  • 수원 맛집
  • WSL
  • docker
  • javascript
  • 알고리즘
  • Spring
  • 티스토리챌린지
  • mariadb
  • 선택정렬
  • Queue
  • Nuxt
  • 자바
  • 서울 맛집
  • VUE
  • spring boot
  • 강릉 맛집
  • 파이썬
  • 오블완
  • github
  • 어플
  • 정렬
  • 수원역 맛집
  • GIT

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
TaeHuiLee
[프로그래머스] 숫자 변환하기 #bfs #level2 #java
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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