문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int solution(int x, int y, int n) {
int answer = 0;
int[] visited = new int[y+1];
Deque<Integer> deque = new ArrayDeque<>();
// 초기 값 x 삽입
deque.addLast(x);
// 초기 값 x의 계산횟수
visited[x] = 0;
// 곱해야 하는 수
int parameter = 0;
// deque가 빌때까지 체크
while(!deque.isEmpty()) {
// deque에 맨 앞에 있는 값을 제거하고 반환 해당 값으로 세가지 연산을 실행한다.
parameter = deque.removeFirst();
// n을 더한다.
if((parameter + n <= y && visited[parameter + n ] == 0)) {
deque.addLast(parameter + n);
if(visited[parameter + n] == 0) {
visited[parameter + n] = visited[parameter]+1;
} else {
visited[parameter + n] = (visited[parameter]+1 < visited[parameter + n]) ? visited[parameter]+1 : visited[parameter + n];
}
}
// 2를 곱한다.
if((parameter * 2 <= y && visited[parameter * 2] == 0)) {
deque.addLast(parameter * 2);
if(visited[parameter * 2] == 0) {
visited[parameter * 2] = visited[parameter]+1;
} else {
visited[parameter * 2] = (visited[parameter]+1 < visited[parameter * 2]) ? visited[parameter]+1 : visited[parameter * 2];
}
}
// 3을 곱한다.
if((parameter * 3 <= y && visited[parameter * 3] == 0)) {
deque.addLast(parameter * 3);
if(visited[parameter * 3] == 0) {
visited[parameter * 3] = visited[parameter]+1;
} else {
visited[parameter * 3] = (visited[parameter]+1 < visited[parameter * 3]) ? visited[parameter]+1 : visited[parameter * 3];
}
}
}
if(visited[y] == 0) {
answer = -1;
} else {
answer = visited[y];
}
if (x == y) {
answer = 0;
}
return answer;
}
}
Java
복사