포스트

[이코테/JAVA] 이코테 - 시각문제

시각 문제

문제

정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 ‘3’이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오.
예를 들어, 1을 입력했을 때 다음은 ‘3’이 하나라도 포함되어 있으므로 세어야 하는 시각이다.

  • 00시 00분 03초
  • 00시 13분 30초

반면에, 다음은 ‘3’이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다.

  • 00시 02분 55초
  • 01시 27분 45초

풀이

  • 시(hour)는 00~24시까지
  • 분(minute)은 00~59분까지
  • 초(second)은 00~59초까지 있다.

  • 시분초를 반복문을 사용하여 3이 포함되어 있으면 결과값에 1을 더하면 된다.
  • 3이 포함되어 있는지 확인하는 것은 매번 확인을 하기 때문에 따로 메서드를 작성하여 호출하기로 하였다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;

public class Main {
    public static boolean check(int h, int m, int s) {
        // 시분초에 3이 하나라도 포함되어 있으면 true를 반환
        // '시'는 24시까지만 존재하기 때문에 10을 나눈 나머지가 3인지만 확인하며
        // '분'과 '초'는 59초까지 존재하기 때문에 10을 나눈 몫, 나머지가 3인지 확인하여 3이 존재하면 3을 반환
        return h % 10 == 3 || m / 10 == 3 || m % 10 == 3 || s / 10 == 3 || s % 10 == 3;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int h = sc.nextInt();

        int result = 0;

        // 입력한 '시'를 반복문
        for (int i = 0; i <= h; i++) {
            // 00분 ~ 59분까지 반복
            for (int j = 0; j < 60; j++) {
                // 00초 ~ 59초까지 반복
                for (int k = 0; k < 60; k++) {
                    // 3이 존재하면 result 값 1 증가
                    if (check(i, j, k)) result++;
                }
            }
        }

        System.out.println(result);
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.