백준

[백준_18312번] 시각

빙수빈수 2021. 8. 12. 15:36

https://www.acmicpc.net/problem/18312

 

18312번: 시각

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

www.acmicpc.net

[문제]

 정수 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)

 

[코드]

import java.util.*;

public class BaekJoon_18312 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int k=sc.nextInt();
		int count=0;
		
		for(int hour=0;hour<=n;hour++) {
			for(int min=0;min<60;min++) {
				for(int sec=0;sec<60;sec++) {
					// 시간을 문자열로 표현, 시,분,초가 10 미만일 경우 앞에 0을 붙인다.
					String time=((hour<10)?"0"+hour:""+hour)+
							((min<10)?"0"+min:""+min)+
							((sec<10)?"0"+sec:""+sec);
					
					// 시간에 k가 포함되어 있다면 count
					if(time.contains(""+k))
						count++;
				}
			}
		}
		
		System.out.println(count);
	}

}

 

[고찰]

 이번 문제는 이전에 풀어봤던 백준의 1436번 영화감독 숌과 비슷한 문제였기 완전탐색으로 모든 시간을 검사하면서cotains() 함수를 사용하여 쉽게 해결할 수 있었다. 단 주의해야할 점은 주어지는 k의 범위는 0~9이기 때문에 시, 분, 초가 10 미만일 경우에는 앞에 0을 붙여 출력해야한다는 것이다. 이렇게 만들어진 문자열이 k를 포함하고 있는지의 여부에 따라 count를 증가시켜주면 된다.