정수 N과 K가 입력되었을 때 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 K가 하나라도 포함되는 모든 시각을 세는 프로그램을 작성하시오. 시각을 셀 때는 디지털 시계를 기준으로, 초 단위로만 시각을 구분한다.
예를 들어 K=3일 때, 다음의 시각들은 3이 하나 이상 포함되어 있으므로 세어야 하는 시각의 대표적인 예시이다.
반면에 다음의 시각들은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 예시이다.
첫째 줄에 정수 N과 K가 공백을 기준으로 구분되어 주어진다. (0≤N≤23, 0≤K≤9)
00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 K가 하나라도 포함되는 시각들의 수를 출력한다.
// 예제 입력 1
5 3
// 예제 출력 1
11475
알고리즘
N의 범위가 크지 않기 때문에 모든 시간을 검사하는 완전탐색을 사용해도 시간제한이나 메모리 제한에 걸리지 않기 때문에 모든 시간에서 K가 들어가는 시간을 검사해 수를 구한다.
주의해야 할 점
시간 변수는 정수형이기 때문에 1시같은 경우는 01시로 검사가 되어야 한다. 즉, 1시는 K가 1일 때만 count가 되는 것이 아닌 K가 0일 때도 count가 되어야 한다. 이 경우 나눗셈을 이용하여 시간 % 10 == K, 시간 / 10 == K 일때를 조건으로 하면 예외없이 count할 수 있다.
#include <iostream>
using namespace std;
int main(void) {
int N, K, num = 0;
cin >> N >> K;
for (int hour = 0; hour <= N; hour++) {
for (int minute = 0; minute < 60; minute++) {
for (int sec = 0; sec < 60; sec++) {
if (hour % 10 == K || hour / 10 == K ||
minute % 10 == K || minute / 10 == K ||
sec % 10 == K || sec / 10 == K)
num++;
}
}
}
cout << num;
}