Skip to content

Commit 719f114

Browse files
committed
[level 2] Title: [PCCP 기출문제] 3번 / 아날로그 시계, Time: 16.91 ms, Memory: 93.2 MB -BaekjoonHub
1 parent 755110a commit 719f114

2 files changed

Lines changed: 255 additions & 0 deletions

File tree

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
# [level 2] [PCCP 기출문제] 3번 / 아날로그 시계 - 250135
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/250135)
4+
5+
### 성능 요약
6+
7+
메모리: 93.2 MB, 시간: 16.91 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > PCCP 기출문제
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 01월 24일 17:07:40
20+
21+
### 문제 설명
22+
23+
<p>시침, 분침, 초침이 있는 아날로그시계가 있습니다. 시계의 시침은 12시간마다, 분침은 60분마다, 초침은 60초마다 시계를 한 바퀴 돕니다. 따라서 시침, 분침, 초침이 움직이는 속도는 일정하며 각각 다릅니다. 이 시계에는 초침이 시침/분침과 겹칠 때마다 알람이 울리는 기능이 있습니다. 당신은 특정 시간 동안 알람이 울린 횟수를 알고 싶습니다.</p>
24+
25+
<p>다음은 0시 5분 30초부터 0시 7분 0초까지 알람이 울린 횟수를 세는 예시입니다.</p>
26+
27+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/fee10e9e-2871-4caf-94e4-b55b2dbcaea9/ex1-1.png" title="" alt="ex1-1.png"></p>
28+
29+
<ul>
30+
<li>가장 짧은 바늘이 시침, 중간 길이인 바늘이 분침, 가장 긴 바늘이 초침입니다.</li>
31+
<li>알람이 울리는 횟수를 세기 시작한 시각은 0시 5분 30초입니다.</li>
32+
<li>이후 0시 6분 0초까지 초침과 시침/분침이 겹치는 일은 없습니다.</li>
33+
</ul>
34+
35+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/61dd5cec-944e-4f48-a3ae-95fd498e197e/ex1-2.png" title="" alt="ex1-2.png"></p>
36+
37+
<ul>
38+
<li>약 0시 6분 0.501초에 초침과 시침이 겹칩니다. 이때 알람이 한 번 울립니다.</li>
39+
<li>이후 0시 6분 6초까지 초침과 시침/분침이 겹치는 일은 없습니다.</li>
40+
</ul>
41+
42+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/d2274db1-cb08-45d0-a6d4-ac6d76705f67/ex1-3.png" title="" alt="ex1-3.png"></p>
43+
44+
<ul>
45+
<li>약 0시 6분 6.102초에 초침과 분침이 겹칩니다. 이때 알람이 한 번 울립니다.</li>
46+
<li>이후 0시 7분 0초까지 초침과 시침/분침이 겹치는 일은 없습니다.</li>
47+
</ul>
48+
49+
<p>0시 5분 30초부터 0시 7분 0초까지는 알람이 두 번 울립니다. 이후 약 0시 7분 0.584초에 초침과 시침이 겹쳐서 울리는 세 번째 알람은 횟수에 포함되지 않습니다.</p>
50+
51+
<p>다음은 12시 0분 0초부터 12시 0분 30초까지 알람이 울린 횟수를 세는 예시입니다.</p>
52+
53+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/3b0781d9-0640-428e-bd9d-4d8c70a3c578/ex2-1.png" title="" alt="ex2-1.png"></p>
54+
55+
<ul>
56+
<li>알람이 울리는 횟수를 세기 시작한 시각은 12시 0분 0초입니다.</li>
57+
<li>초침과 시침, 분침이 겹칩니다. 이때 알람이 한 번 울립니다. 이와 같이 0시 정각, 12시 정각에 초침과 시침, 분침이 모두 겹칠 때는 알람이 한 번만 울립니다.</li>
58+
</ul>
59+
60+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/9f178f43-9819-4b7a-8ed1-783cec0febe3/ex2-2.png" title="" alt="ex2-2.png"></p>
61+
62+
<ul>
63+
<li>이후 12시 0분 30초까지 초침과 시침/분침이 겹치는 일은 없습니다.</li>
64+
</ul>
65+
66+
<p>12시 0분 0초부터 12시 0분 30초까지는 알람이 한 번 울립니다.</p>
67+
68+
<p>알람이 울리는 횟수를 센 시간을 나타내는 정수 <code>h1</code>, <code>m1</code>, <code>s1</code>, <code>h2</code>, <code>m2</code>, <code>s2</code>가 매개변수로 주어집니다. 이때, 알람이 울리는 횟수를 return 하도록 solution 함수를 완성해주세요.</p>
69+
70+
<hr>
71+
72+
<h5>제한사항</h5>
73+
74+
<ul>
75+
<li>0 ≤ <code>h1</code>, <code>h2</code> ≤ 23</li>
76+
<li>0 ≤ <code>m1</code>, <code>m2</code> ≤ 59</li>
77+
<li>0 ≤ <code>s1</code>, <code>s2</code> ≤ 59</li>
78+
<li><code>h1시 m1분 s1초</code>부터 <code>h2시 m2분 s2초</code>까지 알람이 울리는 횟수를 센다는 의미입니다.
79+
80+
<ul>
81+
<li><code>h1시 m1분 s1초</code> &lt; <code>h2시 m2분 s2초</code></li>
82+
<li>시간이 23시 59분 59초를 초과해서 0시 0분 0초로 돌아가는 경우는 주어지지 않습니다.</li>
83+
</ul></li>
84+
</ul>
85+
86+
<hr>
87+
88+
<h5>입출력 예</h5>
89+
<table class="table">
90+
<thead><tr>
91+
<th>h1</th>
92+
<th>m1</th>
93+
<th>s1</th>
94+
<th>h2</th>
95+
<th>m2</th>
96+
<th>s2</th>
97+
<th>result</th>
98+
</tr>
99+
</thead>
100+
<tbody><tr>
101+
<td>0</td>
102+
<td>5</td>
103+
<td>30</td>
104+
<td>0</td>
105+
<td>7</td>
106+
<td>0</td>
107+
<td>2</td>
108+
</tr>
109+
<tr>
110+
<td>12</td>
111+
<td>0</td>
112+
<td>0</td>
113+
<td>12</td>
114+
<td>0</td>
115+
<td>30</td>
116+
<td>1</td>
117+
</tr>
118+
<tr>
119+
<td>0</td>
120+
<td>6</td>
121+
<td>1</td>
122+
<td>0</td>
123+
<td>6</td>
124+
<td>6</td>
125+
<td>0</td>
126+
</tr>
127+
<tr>
128+
<td>11</td>
129+
<td>59</td>
130+
<td>30</td>
131+
<td>12</td>
132+
<td>0</td>
133+
<td>0</td>
134+
<td>1</td>
135+
</tr>
136+
<tr>
137+
<td>11</td>
138+
<td>58</td>
139+
<td>59</td>
140+
<td>11</td>
141+
<td>59</td>
142+
<td>0</td>
143+
<td>1</td>
144+
</tr>
145+
<tr>
146+
<td>1</td>
147+
<td>5</td>
148+
<td>5</td>
149+
<td>1</td>
150+
<td>5</td>
151+
<td>6</td>
152+
<td>2</td>
153+
</tr>
154+
<tr>
155+
<td>0</td>
156+
<td>0</td>
157+
<td>0</td>
158+
<td>23</td>
159+
<td>59</td>
160+
<td>59</td>
161+
<td>2852</td>
162+
</tr>
163+
</tbody>
164+
</table>
165+
<hr>
166+
167+
<h5>입출력 예 설명</h5>
168+
169+
<p><strong>입출력 예 #1</strong></p>
170+
171+
<p>문제 예시와 같습니다.</p>
172+
173+
<p><strong>입출력 예 #2</strong></p>
174+
175+
<p>문제 예시와 같습니다.</p>
176+
177+
<p><strong>입출력 예 #3</strong></p>
178+
179+
<p>0시 6분 1초부터 0시 6분 6초까지 초침과 시침/분침이 겹치는 일은 없습니다. 따라서 알람이 울리지 않으며 0을 return 해야 합니다.</p>
180+
181+
<p><strong>입출력 예 #4</strong></p>
182+
183+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/1b7bbaf3-652a-469a-ab36-3434b77920e3/ex3-1.png" title="" alt="ex3-1.png"></p>
184+
185+
<ul>
186+
<li>11시 59분 30초부터 11시 59분 59초까지 초침과 시침/분침이 겹치는 일은 없습니다.</li>
187+
</ul>
188+
189+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/3b0781d9-0640-428e-bd9d-4d8c70a3c578/ex2-1.png" title="" alt="ex2-1.png"></p>
190+
191+
<ul>
192+
<li>12시 0분 0초에 초침과 시침, 분침이 겹칩니다. 이때 알람이 한 번 울립니다.</li>
193+
</ul>
194+
195+
<p>11시 59분 30초부터 12시 0분 0초까지 초침과 시침/분침이 겹치는 횟수는 1이며 따라서 알람이 한 번 울립니다.</p>
196+
197+
<p><strong>입출력 예 #5</strong></p>
198+
199+
<ul>
200+
<li>약 11시 58분 59.917초에 초침과 시침이 겹칩니다. 이때 알람이 한 번 울립니다.</li>
201+
</ul>
202+
203+
<p>11시 58분 59초부터 11시 59분 0초까지 초침과 시침/분침이 겹치는 횟수는 1이며 따라서 알람이 한 번 울립니다.</p>
204+
205+
<p><strong>입출력 예 #6</strong></p>
206+
207+
<ul>
208+
<li>약 1시 5분 5.085초에 초침과 분침이 겹칩니다. 이때 알람이 한 번 울립니다.</li>
209+
<li>약 1시 5분 5.424초에 초침과 시침이 겹칩니다. 이때 알람이 한 번 울립니다.</li>
210+
</ul>
211+
212+
<p>1시 5분 5초부터 1시 5분 6초까지 초침과 시침/분침이 겹치는 횟수는 2며 따라서 알람이 두 번 울립니다.</p>
213+
214+
<p><strong>입출력 예 #7</strong></p>
215+
216+
<p>0시 0분 0초부터 23시 59분 59초까지 초침과 시침/분침이 겹치는 횟수는 2852며 따라서 알람이 총 2852번 울립니다.</p>
217+
218+
219+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution {
2+
public int solution(int h1, int m1, int s1, int h2, int m2, int s2) {
3+
int answer, noon, afternoon, start, end;
4+
5+
answer = 0;
6+
noon = 0;
7+
afternoon = 3600 * 12;
8+
start = change_time_to_second(h1, m1, s1);
9+
end = change_time_to_second(h2, m2, s2);
10+
11+
System.out.println(noon + " " + afternoon + " " + start + " " + end);
12+
13+
if(start == noon || start == afternoon) answer = 1;
14+
if(end == afternoon) answer =- 1;
15+
if(start < afternoon && afternoon < end) answer -= 1;
16+
17+
18+
return cal_rot_cnt(end) - cal_rot_cnt(start) + answer;
19+
}
20+
21+
int cal_rot_cnt(int time){
22+
return (int)rot_minute_hand(time) + (int)rot_hour_hand(time);
23+
}
24+
25+
double rot_minute_hand(int time){
26+
return time * (59.0 / 3600);
27+
}
28+
29+
double rot_hour_hand(int time){
30+
return time * (719.0 / 43200);
31+
}
32+
33+
int change_time_to_second(int h, int m, int s){
34+
return h * 3600 + m * 60 + s;
35+
}
36+
}

0 commit comments

Comments
 (0)