-
[Programmers] 숫자 변환하기 / ⭕Algorithm/Programmers 2024. 7. 17. 09:47
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 제출 코드 (16분 07초 / DP)
import java.util.*; class Solution { public int solution(int x, int y, int n) { int answer = 0; int[] dp = new int[1000001]; Arrays.fill(dp, Integer.MAX_VALUE); dp[x] = 0; for(int i = x; i < y; i++) { if(dp[i] != Integer.MAX_VALUE) { if(i + n <= 1000000) { dp[i + n] = Math.min(dp[i + n], dp[i] + 1); } if(i * 2 <= 1000000) { dp[i * 2] = Math.min(dp[i * 2], dp[i] + 1); } if(i * 3 <= 1000000) { dp[i * 3] = Math.min(dp[i * 3], dp[i] + 1); } } } if(dp[y] != Integer.MAX_VALUE) { answer = dp[y]; } else { answer = -1; } return answer; } }
2. 구현 로직
- y의 값이 최대가 1,000,000이므로 1,000,001 크기의 DP 배열 생성
- DP 배열에는 연산 횟수가 담기기 때문에 각 배열의 값은 Integer.MAX_VALUE로 초기화
- x부터 시작이므로 dp[x]=0으로 초기화
- x부터 y까지 Integer.MAX_VALUE가 아닌 것을 하나씩 탐색
- i + n, i * 2, i * 3이 1,000,000보다 클 경우는 없기에 조건문 삽입
- dp[i]에 추가 연산 +1과 연산되어 나온 인덱스( i + n, i * 2, i * 3)의 Value와 비교하여 최솟값을 저장
- 만약 dp[y]가 Integer.MAX_VALUE이면 나올 수 없는 값이므로 -1
3. 유의할 점
- y의 크기를 보지않고 dfs로 문제를 풀이를 하다가 다시 생각해보니 시간 초과가 날 거 같아 DP로 풀이를 진행했다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 시소 짝꿍 / ❌ (0) 2024.07.21 [Programmers] 뒤에 있는 큰 수 찾기 / ❌ (0) 2024.07.20 [Programmers] 무인도 여행 / ⭕ (4) 2024.07.16 [Programmers] 호텔 대실 / ⭕ (0) 2024.07.15 [Programmers] 혼자서 하는 틱택토 / ⭕ (0) 2024.07.11