시각 (구현 알고리즘)

시각 (구현 알고리즘)

[문제1] 시각#

[문제] 시각 : 문제 설명#

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

다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다 00시 00분 03초 00시 13분 30초

반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다 00시 02분 55초 01시 27분 45초

[문제] 조건#

조건 풀이시간 15분 시간제한 2초, 메모리 128mb

입력 첫째 줄에 정수 N이 입력된다.(0<=N<=23)

출력 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다.

입력예시 5

출력예시 11475

아이디어#

복잡하게 생각할 필요없이 하루는 86,400초로 00시00분00초 -> 23시59분59초 까지 모든 경우는 86,400로 경우의 수가 100,000 개도 되지 않기 때문에 모든 초를 센다 하여도 2초가 넘지 않는다.

모든 초를 조회하는 완전탐색 유형으로 생각하면된다.

모든 시간 분 초를 순회하며, 합쳐서 문자로 합쳐서 포함 여부를 조회한다.

파이썬 if(‘3’ in str(hour)+str(minute)+str(second)) : #활용

자바 if((""+hour+minute+second).contains(“3”)){} //활용

time1.py#

n = int(input())

count, hour, minute, second = 0, 0, 0, 0

while True :
    
    if('3' in str(hour)+str(minute)+str(second)):
        count += 1
    second += 1
    if second == 60 :
        minute += 1
        second = 0
    if minute == 60 :
        hour += 1
        minute = 0
    if hour == n+1 :
        break
    
print(count) 
            

파이썬 모범답안#

n = int(input())

result = 0;
for h in range(n+1) :
    for m in range(60) :
        for s in range(60) :
            if('3' in str(h)+str(m)+str(s)) :
                result += 1

print(result)

Time.java#

package ex.Algorithm.implement;
import java.util.Scanner;

public class Time{
	public static void main(String args[]) {
		
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int hour = 0;
		int minute = 0;
		int second = 0;
		int count = 0;

		while (true) {
			
			if((""+hour+minute+second).contains("3")) {
				count++;
			}
			
			second++;
			
			if(second == 60){
				minute ++;
				second = 0;
			}
			if(minute == 60){
				hour ++;
				minute = 0;
			}
			if(hour == n+1){
				break;
			}
		}
		System.out.println(count);
	}
}
            

이 자료는 나동빈님의 이코테 저서를 보고 정리한 자료입니다.