ALGORITHM/COSPRO 2급

[JAVA] 369 게임 (COS Pro 2급 문제 풀이)

문제6

369 게임은 여러 명이 같이하는 게임입니다. 게임의 규칙은 아래와 같습니다.

  • 1부터 시작합니다.
  • 한 사람씩 차례대로 숫자를 1씩 더해가며 말합니다.
  • 말해야 하는 숫자에 3, 6, 9중 하나라도 포함되어있다면 숫자를 말하는 대신 숫자에 포함된 3, 6, 9의 개수만큼 손뼉을 칩니다.

어떤 수 number가 매개변수로 주어질 때, 1부터 number까지 369게임을 올바르게 진행했을 경우 박수를 총 몇 번 쳤는지를 return 하도록 solution 메소드를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.


매개변수 설명

number가 solution 메소드의 매개변수로 주어집니다.

  • number는 10 이상 1,000 이하의 자연수입니다.

return 값 설명

1부터 number까지 369게임을 올바르게 진행했을 경우 박수를 총 몇 번을 쳤는지 return 해주세요.


예시
number return
40 22
예시 설명

3, 6, 9 : 각각 한 번 (+3)
13, 16, 19 : 각각 한 번 (+3)
23, 26, 29 : 각각 한 번 (+3)
30, 31, 32, 33, ..., 38, 39 : 십의 자리 열 번 + 일의 자리 세 번 (+13)
따라서, 3 + 3 + 3 + 13 = 22번의 박수를 칩니다.

풀이

  1. 해당 값을 받아오면, 1부터 해당 숫자까지 for문을 이용한다.
  2. 해당 값을 문자열로 바꾸어 자릿수가 몇자리 인지 구한다. 이 작업은 log를 이용해서도 가능하다.
  3. 값이 만약 2자릿수(ex:13)이면, 10의 자리수와 1의 자리수를 쪼개어 보기위해 for문을 이용한다.
  4. 위의 예시에서 10자리수가 3,6,9에 해당하지는지 체크하고, 있다면 결과값에 1을 더하고, 1의 자리수에 3,6,9가 있는지 확인하고 있다면 결과값을 count해준다.

위 과정을 반복하면 값이 나온다.

code

package num1;

public class q6 {
    static boolean check(int n){
        boolean result;
        switch (n){
            case 3: case 6: case 9:
                result = true;
                break;
            default:
                result = false;
                break;
        }
        return result;
    }
    static int solution(int n){
        int result = 0;
        for(int i=1; i<=n; i++){
            String numS = Integer.toString(i);
            for(int a=0; a<numS.length(); a++){
                int numI = Character.getNumericValue(numS.charAt(a));
                if(check(numI))
                    //System.out.println(i);
                    result++;
            }
        }

        return result;
    }

    public static void main(String args[]){
        System.out.println(solution(40));
    }
}