Develop/Algorithm

우테코 온보딩 - Problem 3

IJY 2022. 11. 9. 11:37

우테코 온보딩 - Problem 3 문제 풀이

 

문제 설명

배달이가 좋아하는 369게임을 하고자 한다. 놀이법은 1부터 숫자를 하나씩 대면서, 3, 6, 9가 들어가는 숫자는 숫자를 말하는 대신 3, 6, 9의 개수만큼 손뼉을 쳐야 한다.

숫자 number가 매개변수로 주어질 때, 1부터 number까지 손뼉을 몇 번 쳐야 하는지 횟수를 return 하도록 solution 메서드를 완성하라.

제한사항
- number는 1 이상 10,000 이하인 자연수이다.

 

문제의 자세한 내용은 해당 링크를 통해 확인 : 문제 링크

 

풀이 코드

package onboarding;

import java.util.stream.Stream;

public class Problem3 {
    public static int solution(int number) {
        int answer = 0;
        for(int i = 3; i <= number; i++) {
            answer += Stream.of(String.valueOf(i)
                    .split(""))
                    .mapToInt(Integer::parseInt)
                    .filter(o -> o != 0 && o % 3 == 0)
                    .count();
        }
        return answer;
    }
}

 

문제 해결 전략

이라 쓰고 문제를 보고서 어떻게 풀면 될까?에 대한 생각을 정리한 항목

정말 간단한 방법으로 3부터 입력받은 숫자까지 증가하며 1자리 단위로 쪼갠 후 3의 배수의 개수만큼 answer를 증가시켜 구하는 방식으로 해결

이 방식은 시간 복잡도는 1도 생각 안하고 구현한 방식이므로 좋은 풀이는 아니지만 10,000 이하의 자연수라는 제한사항이 있기 때문에 해당 풀이로도 적당하다고 판단

시간 복잡도를 어느정도 생각한 코드로 리팩터링을 할 예정이나 머리가 안따라줘서 언제 할 수 있을지 의문..


코드를 업로드해 둔 깃 허브