[level 2] 숫자 변환하기 - 154538

2024. 10. 7. 20:36·코딩테스트/프로그래머스

[level 2] 숫자 변환하기 - 154538

문제 링크

성능 요약

메모리: 161 MB, 시간: 255.38 ms

구분

코딩테스트 연습 > 연습문제

채점결과

정확성: 100.0
합계: 100.0 / 100.0

제출 일자

2024년 10월 07일 20:26:52

문제 설명

자연수 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

입출력 예
x y n result
10 40 5 2
10 40 30 1
2 5 4 -1

입출력 예 설명

입출력 예 #1
x에 2를 2번 곱하면 40이 되고 이때가 최소 횟수입니다.

입출력 예 #2
x에 n인 30을 1번 더하면 40이 되고 이때가 최소 횟수입니다.

입출력 예 #3
x를 y로 변환할 수 없기 때문에 -1을 return합니다.

 

해결 답안

import java.util.*;

class Solution {
    public int solution(int x, int y, int n) {
        Set<Integer> visited = new HashSet<>();
        Queue<int[]> q = new LinkedList<>();
        
        q.add(new int[]{x,0});
        visited.add(x);
        while(!q.isEmpty()){
            int[] curX = q.poll();
            
            if(curX[0] == y){
                return curX[1];
            }
            
            if(curX[0]<y){
                if(!visited.contains(curX[0] * 2) && curX[0]*2<=y){
                    q.offer(new int[]{curX[0] * 2, curX[1] + 1});
                    visited.add(curX[0] * 2);
                }
                if (!visited.contains(curX[0] * 3) && curX[0]*3<=y){
                    q.offer(new int[]{curX[0] * 3, curX[1] + 1});
                    visited.add(curX[0] * 3);
                } 
                if (!visited.contains(curX[0] + n) && curX[0]+n<=y){
                    q.offer(new int[]{curX[0] + n, curX[1] + 1});
                    visited.add(curX[0] + n);
                }
            }
            
        }
        return -1;
    }
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[level 2] 괄호 회전하기 - 76502  (0) 2024.10.11
[level 2] 방문 길이 - 49994  (1) 2024.10.07
[level 2] 스킬트리 - 49993  (0) 2024.10.04
[level 2] 피로도 - 87946  (0) 2024.10.01
[level 3] 단어 변환 - 43163  (0) 2024.09.30
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [level 2] 괄호 회전하기 - 76502
  • [level 2] 방문 길이 - 49994
  • [level 2] 스킬트리 - 49993
  • [level 2] 피로도 - 87946
mint723dev
mint723dev
mint723dev 님의 블로그 입니다.
  • mint723dev
    mint723dev 님의 블로그
    mint723dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • Computer Science (16)
        • Computer Architecture (0)
        • Data Structure (2)
        • Database (4)
        • Network (4)
        • Operating System (6)
        • Software Engineering (0)
      • Java (6)
      • 자료 구조 (0)
      • 코딩테스트 (62)
        • LeetCode (1)
        • 프로그래머스 (29)
        • 백준 (32)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    deque
    JVM
    탐욕법
    DFS
    오블완
    티스토리챌린지
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
mint723dev
[level 2] 숫자 변환하기 - 154538
상단으로

티스토리툴바