철수의 아날로그 시계는 시침과 분침이 모두 매초 항상 일정한 속도로 움직인다고 한다. 즉 1초마다 시침과 분침의 위치가 모두 변한다. 이때 0도 이상 180도 이하의 각도A를 입력하면 하루동안(00:00:00부터 23:59:59) 시침과 분침이 이루는 각도가 A와 일치하는 순간을 모두 출력하는 프로그램을 작성하라.
단 시침과 분침이 이루는 각도는 항상 180도 이하로 환산하여 생각한다. (ex>A가 90이면, 시침과 분침사이 각도가 90도와 270도인 경우 모두 해당된다.)
입력되는 A는 정수이고, 출력되는 시간은 hh:mm:ss형식으로 시간, 분, 초를 모두 2자리 자연수로 출력하되 1자리수인 경우는 앞에 0을 붙여서 출력한다.
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int angle;
cin >> angle;
int hour = 0, minute = 0, second = 0;
for (; hour < 24; ++hour)
{
int s_hour = hour;
if (hour > 12) s_hour = hour - 12;
for (minute = 0; minute < 60; ++minute)
{
for (second = 0; second < 60; ++second)
{
double cal_angle = fabs((double)s_hour * 30 + ((double)1 / 120) * second + minute * 0.5 - (double)minute * 6 - second * 0.1);
if (cal_angle == (double)angle || cal_angle == 360 - (double)angle)
{
printf("%02d::%02d::%02d\n", hour, minute, second);
}
}
}
}
return 0;
}
풀이 작성