우테코5기 프리코스 1주차 Problem3

@hongo · November 02, 2022 · 1 min read

Problem3 : 369 게임

  • 369 게임중, 어떤 숫자 number가 주어졌을 때, 1부터 number까지 쳐야하는 손뼉의 개수를 반환하는 문제였다.
  • number는 1 이상 10,000 이하인 자연수이다.

📗 기능 목록

📌 `int getNumberOfClap(String number)`
* `number`에 들어가는 3, 6, 9의 개수를 반환

📌 `int getCountOfClap(int number)`
* 1부터 number까지 쳐야하는 손뼉의 개수를 반환

📌 코드

깃허브 코드

  • 굉장히 심플하게 풀었다. 1부터 number까지 모든 숫자들을 for문으로 순회하며, 각 숫자에 들어가는 3, 6, 9의 개수를 카운트해서 풀었다.

✏ 다른 분의 풀이

mihye126님의 허락을 받고 슬랙에 공유해주신 풀이를 가져왔다.

private static List<String> parseDigits(int num) {
    List<String> digits = new ArrayList<>();

    for (int i = 1; i <= num; i++) {
        String s = Integer.toString(i);
        digits.addAll(Arrays.asList(s.split("")));
    }
    return digits;
}

public static int solution(int number) {
    List<String> target = Arrays.asList("3", "6", "9");
    List<String> digits = parseDigits(number);
    digits.retainAll(target);

    return digits.size();
}

3, 6, 9를 카운트 하는 방법에 차이가 있는데, 369가 담긴 콜렉션 객체를 만들고 1부터 number까지의 모든 수의 digit을 저장하는 리스트를 만들어 retainAll을 적용하는 풀이였다. retainAll을 사용해 교집합을 수행할 수 있음을 배웠다.

또, 자린이인 나는 Arrays.asList()또한 생소하였다. 인자로 들어간 것들로 List를 만든다는 것일까? 이에 관해 찾아본 것을 포스팅 Java - new ArrayList<>() vs Arrays.asList() vs List.of()로 정리하였다.

@hongo
홍고 블로그