유튜브에 동빈나님 이코테2021 몰아보기 영상을 보고 이론 수강 후, 직접 구현 & 코드 비교 + 관련 문제 푸는 방식
동빈나 이코테 : https://youtu.be/2zjoKjt97vQ
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램 작성하기.
구현하기 문제인데 _ 떠오르는 건 수학적인 접근법 밖에 없었다.왜냐하면 모든 경우 때마다 적어도 하나의 3이 있는지를 확인하는 것을 구현하는 것이 너무 귀찮게 느껴졌다. 근데 이건 사실 그래야하는 문제였던 것이다.
00시 00분 00초 ~ 00시 59분 59 초 : 3600가지의 경우가 존재.
3이 하나라도 포함되어 있는 모든 경우의 수 구하기 : 전체 경우에서, 3이 하나도 포함되어있지 않은 경우의 수 구하기.
0~9 에서 3을 제외 : 9
0~5 에서 3을 제외 : 5
0초~59 초에서 제외할 경우의수 : 9x5
0분~59분에서 제외할 경우의 수 : 9x5x(9x5)
N x 3600 - (45 x45 (N-(n>=3)) )
n이 0이어도 N은 1이어야 한다.
#include <iostream>
int main()
{
int n;
std::cin >> n;
int result = (n+1)*3600 - (45 * 45 * (n+1 - (n >= 3))) ;
printf("%d", result);
}
1시간은 3600초
24시는 86400초.
1초가 지남에 따라 3 이 적어도 하나가 포함되어있는지 확인하기에 괜찮은 정도의 경우의 수
즉 모든 경우를 완전 탐색하는 방식.
ab분 cd초에서