시각 (구현 알고리즘)
시각 (구현 알고리즘)
[문제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);
}
}
이 자료는 나동빈님의 이코테 저서를 보고 정리한 자료입니다.