해당 포스팅은 이전 기수 프리코스 1주차 3번 문제를 풀어보았다.
난이도가 높은 문제는 아니지만, 구현 방식에 있어서 고민을 했다.
private static int solution(int number) {
int[] arr = new int[number + 1];
for (int i = 1; i <= number; i++) {
arr[i] = arr[i - 1] + count369(i);
}
return arr[number];
}
private static int count369(int target) {
int count = 0;
while (target > 0) {
int digit = target % 10;
if (digit == 3 || digit == 6 || digit == 9) {
count++;
}
target /= 10;
}
return count;
}
처음에는 배열로 분리하지않고 sum++을 해서 retrun sum 을 하는 형식이였다. 하지만 이렇게 하다보니 기능을 분리하는 면에서 좋은 것 같지 않아 배열로 바꾸게 되었다. DP..? 라고 볼수는 없지만 기능 분리를 위해 배열을 사용한거나 다름 없다.
결국 while을 돌면서 자릿수를 전부 확인하면서 count를 하는 형식이다보니 숫자가 커질수록 오래걸릴 것 이다. 이를 개선할 수 있는 방법이 있다면 적용해보고 싶다,,