본문 바로가기
문제풀이/프로그래머스

[JAVA] 프로그래머스 - 숫자 변환하기

by 그적 2023. 5. 9.

목차

  • 문제
  • 내가 푼 방법
  • 자바 코드
  • 결과 및 회고

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/154538

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


2. 내가 푼 방법

dp로 풀었는데, 재귀를 돌리니 최종 제출에서 런타임 에러를 마주했다. 그래서 for문을 돌려서 해결했다.


3. 자바 코드

깃허브 풀이 주소

https://github.com/geujeog/Programmers/blob/main/Solution_%EC%88%AB%EC%9E%90%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0.java

import java.util.*;

class Solution {
    public int solution(int x, int y, int n) {
        Integer[] dp = new Integer[y+1];
        dp[x] = 0;
        
        for (int i = x; i <= y; i++) {
            if (dp[i] == null) continue;
            
            if (i + n <= y) {
                if (dp[i+n] == null) dp[i+n] = dp[i] + 1;
                else dp[i+n] = Math.min(dp[i+n], dp[i]+1);
            }
            if (i * 2 <= y) {
                if (dp[i*2] == null) dp[i*2] = dp[i] + 1;
                else dp[i*2] = Math.min(dp[i*2], dp[i]+1);
            }
            if (i * 3 <= y) {
                if (dp[i*3] == null) dp[i*3] = dp[i] + 1;
                else dp[i*3] = Math.min(dp[i*3], dp[i]+1);
            }
        }
        
        if (dp[y] == null) return -1;
        
        return dp[y];
    }
}

4. 결과 및 회고

다른 분들이 재귀 깊이 한도가 있는 것 같다고 말씀해 주셨는데, 그래서 레벨 2인가? ㅎㅎ.. 

깔끔하게 작성하도록 노력해보장.

 

댓글