티스토리 뷰
var n,i:int64; a,b,c,d,e,f:real;
begin
readln(n);
for i:=1 to n do begin
readln(a,b,c);
a:=a*3600+b*60+c;
b:=b*720+c*12;
c:=c*720;
d:=abs(a-b);
if d>21600 then d:=43200-d;
e:=abs(a-c);
if e>21600 then e:=43200-e;
f:=abs(b-c);
if f>21600 then f:=43200-f;
if d>e then d:=e;
if d>f then d:=f;
writeln((d*360)/43200);
end;
end.
풀이 : 아날로그 시계
아날로그 시계를 43200 등분 했다고 생각하고 풀었습니다 (1시간 간격은 3600)
초가 움직이면서 분침, 시침이 움직이는 것도 고려하였습니다.
초가 60초가 되면 1분이 되고,
분이 60분이 되면 1시간이 되기 때문입니다.
고로 1시간을 3600 등분할 수 있으며, 아날로스 시계는 1~12 이므로 곱하기 12을 하면 43200 등분이 됩니다.
분끼리의 간격은 720 등분이므로, 1초에 12등분이 움직인다고 볼 수 있습니다.
시끼리의 간격은 3600등분이며 1분에 60등분이 움직이고, 1초에 1등분이 움직이므로 이것들을 이용하여 아래 식을 만들면 아래와 같은 식이 만들어집니다.
전체 : 43200
초 구하는 식 : c초 / 5 * 3600 => c초 * 720
분 구하는 식 : b분 / 5 * 3600 + c초 * 12 => b분 * 720 + c초
시 구하는 식 : a시 * 3600 + b분 * 60 + c초
17초 : 12,240
47분 : 33,840 + 204 = 34,044
7시 : 25,200 + 2,820 + 17 = 28,037
여기서 3개의 반직선 중 2개의 반직선을 골라서 각을 계산합니다 (내각, 외각 모두 고려합니다)
시침-분침, 시침-초침, 분침-초침 의 내각 외각을 구해서 가장 작은 각을 구합니다.
내각을 구했다면 여기에 360도를 의미하는 360을 곱한 다음 43200으로 나누면 됩니다.
'Pascal > BAEKJOON' 카테고리의 다른 글
pascal 30891번 볶음밥 지키기 (백준) (0) | 2025.01.25 |
---|---|
pascal 11665번 직육면체 교집합 (백준) (0) | 2025.01.25 |
pascal 17290번 Crazy_aRcade_Good (백준) (0) | 2025.01.11 |
pascal 30923번 크냑과 3D 프린터 (백준) (0) | 2025.01.11 |
pascal 15803번 PLAYERJINAH’S BOTTLEGROUNDS (백준) (0) | 2025.01.11 |
- Total
- Today
- Yesterday
- Krustal
- 오프라인 쿼리
- Segment Tree
- 1835
- 최대공약수
- 브루트포스
- Lazy Propagation
- 정렬
- PASCAL
- 1835번
- DFS
- 플로이드
- 그리디
- C++
- 최소 스패닝 트리
- 스택
- XOR
- union
- 그래프
- 누적 합
- 누적합
- 기하학
- 덱
- find
- 백준
- BFS
- java
- DP
- C언어
- 세그먼트 트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |