우테코 온보딩 - Problem 5 문제 풀이
문제 설명
계좌에 들어있는 돈 일부를 은행에서 출금하고자 한다. 돈 담을 지갑이 최대한 가볍도록 큰 금액의 화폐 위주로 받는다.
돈의 액수 money가 매개변수로 주어질 때, 오만 원권, 만 원권, 오천 원권, 천 원권, 오백원 동전, 백원 동전, 오십원 동전, 십원 동전, 일원 동전 각 몇 개로 변환되는지 금액이 큰 순서대로 리스트/배열에 담아 return 하도록 solution 메서드를 완성하라.
제한사항
- money는 1 이상 1,000,000 이하인 자연수이다.
문제의 자세한 내용은 해당 링크를 통해 확인 : 문제 링크
풀이 코드
package onboarding;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Problem5 {
public static List<Integer> solution(int money) {
List<Integer> answer = new ArrayList<>();
int[] moneyArray = new int[]{50000, 10000, 5000, 1000, 500, 100, 50, 10};
for(int i : moneyArray) {
answer.add(money / i);
money %= i;
}
answer.add(money);
return answer;
}
}
문제 해결 전략
이라 쓰고 문제를 보고서 어떻게 풀면 될까?에 대한 생각을 정리한 항목
간단하게 최대 금액부터 가장 작은 금액으로 나눈 몫을 저장하여 반환하면 될 것이라 생각
좀 더 간편하게 구현할 수 없을까? 라는 생각을 하다가 금액을 배열에 저장 후 향상된 for문 (enhanced for loop)를 사용하면 될 것 같다고 판단
반환할 리스트를 만들고, 배열 값으로 향상된 for문을 반복하며 몫을 구하여 저장 후 money에 나머지 값을 대입하여 재사용
1원 단위는 굳이 나눌 필요 없이 나머지 값을 기록하면 되기에 향상된 for문을 빠져나온 후 남은 금액을 리스트에 추가 후 반환하여 해결
코드를 업로드해 둔 깃 허브
'Develop > Algorithm' 카테고리의 다른 글
우테코 온보딩 - Problem 7 (0) | 2022.11.09 |
---|---|
우테코 온보딩 - Problem 6 (0) | 2022.11.09 |
우테코 온보딩 - Problem 4 (0) | 2022.11.09 |
우테코 온보딩 - Problem 3 (2) | 2022.11.09 |
우테코 온보딩 - Problem 2 (0) | 2022.11.09 |