[백준 C++] 18312. 시각

garden.97·2021년 11월 29일
0

백준 C++

목록 보기
3/28
post-thumbnail

문제 링크

문제

정수 N과 K가 입력되었을 때 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 K가 하나라도 포함되는 모든 시각을 세는 프로그램을 작성하시오. 시각을 셀 때는 디지털 시계를 기준으로, 초 단위로만 시각을 구분한다.

예를 들어 K=3일 때, 다음의 시각들은 3이 하나 이상 포함되어 있으므로 세어야 하는 시각의 대표적인 예시이다.

  1. 23시 00분 00초
  2. 07시 08분 33초

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

  1. 15시 02분 55초
  2. 18시 27분 45초

입력

첫째 줄에 정수 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;
}

profile
who wants to become a backend developer💪👩‍💻

0개의 댓글