Search

숫자 변환하기

알고리즘
연습문제
플랫폼
프로그래머스
JCF
ArrayDeque
상태
해결
생성 일시
2024/01/22 07:53
최종 편집 일시
2024/01/22 10:40

문제 설명

해결과정

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
복사