-
[Programmers] 숫자 변환하기 (Java)Algorithm 2023. 9. 6. 19:31728x90
문제 설명
자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.
- x에 n을 더합니다
- x에 2를 곱합니다.
- x에 3을 곱합니다.
자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.
제한사항- 1 ≤ x ≤ y ≤ 1,000,000
- 1 ≤ n < y
Solution
import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; public class 숫자변환하기 { public int solution(int x, int y, int n) { return bfs(x, y, n); } private int bfs(int x, int y, int n) { HashSet<Integer> set = new HashSet<Integer>(); Queue<Node> queue = new LinkedList<Node>(); set.add(x); queue.add(new Node(x, 0)); while (!queue.isEmpty()) { Node currentNode = queue.poll(); if (currentNode.currentValue == y) { return currentNode.count; } int multiplicationBy2 = multiplication(currentNode.currentValue, 2); int multiplicationBy3 = multiplication(currentNode.currentValue, 3); int additionByn = addition(currentNode.currentValue, n); if (multiplicationBy2 <= y && !set.contains(multiplicationBy2)) { set.add(multiplicationBy2); queue.add(new Node(multiplicationBy2, currentNode.count + 1)); } if (multiplicationBy3 <= y && !set.contains(multiplicationBy3)) { set.add(multiplicationBy3); queue.add(new Node(multiplicationBy3, currentNode.count + 1)); } if (additionByn <= y && !set.contains(additionByn)) { set.add(additionByn); queue.add(new Node(additionByn, currentNode.count + 1)); } } return -1; } private int multiplication(int multiplicand, int multiplier) { return multiplicand * multiplier; } private int addition(int addend1, int addend2) { return addend1 + addend2; } static class Node { int count; int currentValue; public Node(int currentValue, int count) { this.currentValue = currentValue; this.count = count; } } }
728x90'Algorithm' 카테고리의 다른 글
[알고리즘] 누적합 알고리즘 (0) 2023.12.25 [Programmers] 거리두기 확인하기 JAVA (0) 2023.12.17 [Programmers] 무인도 여행 (JAVA) (0) 2023.09.03 [Programmers] 호텔 대실 (JAVA) (1) 2023.09.03 [Programmers] 리코쳇 로봇 (JAVA) (0) 2023.09.03