문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/148653

제한 사항

입출력 예

풀이
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int storey) {
int answer = Integer.MAX_VALUE;
ArrayList<int[]> resultList = getAnswer(List.of(new int[] { storey, 0 }),
String.valueOf(storey).length());
for (int[] i : resultList) answer = Math.min(answer, i[1]);
return answer;
}
private ArrayList<int[]> getAnswer(List<int[]> storeyList, int count) {
ArrayList<int[]> nextList = new ArrayList<>();
for (int[] i : storeyList) {
int curNum = i[0] % 10;
int next = i[0] / 10;
int[] new1 = new int[] { next + 1, i[1] + 10 - curNum };
int[] new2 = new int[] { next, i[1] + curNum };
nextList.add(new1);
nextList.add(new2);
}
if (count-- == 0) return nextList;
else return getAnswer(nextList, count);
}
}
후기
문제를 보자마자 carry가 있겠구나 해서 어떻게 처리를 해줄까 하다 제한사항을 보니 1억이었다. 이게 그냥 숫자로 1씩 늘어나는거면 안 되지만 이 문제는 자릿수가지고 푸는 문제이기 때문에 최대라고 해봤자 2의 9승밖에 안 된다. 그래서 그냥 완전탐색으로 풀었다. 가능한 경우를 모두 찾고 제일 작은걸 찾아서 제출했다.
흠... 근데 왜 5점이나 주는지 모르겠다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][Java][Lv. 2] 숫자 카드 나누기 (0) | 2024.08.10 |
|---|---|
| [프로그래머스][Java][Lv. 2] 디펜스 게임 (0) | 2024.08.08 |
| [프로그래머스][Java][Lv. 2] 택배 배달과 수거하기 (0) | 2024.08.06 |
| [프로그래머스][Java][Lv. 2] [PCCP 기출문제] 2번 / 석유 시추 (0) | 2024.08.01 |
| [프로그래머스][Java][Lv. 0] 구슬을 나누는 경우의 수 (0) | 2024.07.22 |