문제
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
이 문제에서는 초침을 기준으로 분침과 시침이 겹칠 때, 알람이 울리는데, 시작 시간과 종료 시간이 주어질 때, 몇번의 알람이 울리는지 계산하는 문제이다.
시간, 분, 초마다 1초가 지났을때, 각도가 얼마나 증가하는지 생각한다.
기준 계산
시간 기준
12시간에 360도를 회전하는 것을 생각해보면
12 * 3600 : 360 = 1 : x
x = 1/120, 1초에 1/120도 회전
분 기준
60분에 360도를 회전한다.
60 * 60 : 360 = 1 : x
x = 1/10, 1초에 1/10도 회전
초기준
60초에 360도를 회전한다.
60 : 360 = 1 : x
x= 6, 1초에 6도 회전
1. 정시에 시작을 하는 경우 알람을 울리고 시작하므로, 1을 증가시킨다.
2. 시작, 끝 시간을 초로 기록한다.
3. 1초가 지나기전 시, 분, 초 각도를 계산한다.
4. 1초가 지난 후 시, 분, 초 각도를 계산한다.
5. 초침이 시침을 지나갔을 경우, 초침이 분침을 지나갔을 경우에 횟수를 더해준다.
5-1. 회전 후 시침 분침이 동일하면서, 초침이 지났으면 겹치는 경우이므로, -1을 해준다.
소스코드
class Solution {
public int solution(int h1, int m1, int s1, int h2, int m2, int s2) {
int answer = 0;
int startSec = calSecond(h1, m1, s1);
int endSec = calSecond(h2, m2, s2);
if (startSec % 3600 == 0) answer++;
while (startSec < endSec) {
double sBeforeAngle = (startSec * 6) % 360;
double mBeforeAngle = (startSec / (double) 10) % 360;
double hBeforeAngle = (startSec / (double) 120) % 360;
double sAfterAngle = ((startSec + 1) * 6) % 360;
double mAfterAngle = ((startSec + 1) / (double) 10) % 360;
double hAfterAngle = ((startSec + 1) / (double) 120) % 360;
if (sAfterAngle == 0) sAfterAngle = 360;
if (mAfterAngle == 0) mAfterAngle = 360;
if (hAfterAngle == 0) hAfterAngle = 360;
if (sBeforeAngle < hBeforeAngle && hAfterAngle <= sAfterAngle) answer++;
if (sBeforeAngle < mBeforeAngle && mAfterAngle <= sAfterAngle) answer++;
if (mAfterAngle == hAfterAngle && sBeforeAngle < mBeforeAngle && mAfterAngle <= sAfterAngle) answer--;
startSec++;
}
return answer;
}
private int calSecond(int h, int m, int s) {
return (3600 * h) + (60 * m) + s;
}
}
실행결과

'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] 같은 숫자는 싫어 - Java (0) | 2025.07.20 |
|---|---|
| [Programmers] 공원 산책 - Java (0) | 2025.07.19 |
| [Programmers] PCCE 기출문제 10번 - 공원 - Java (0) | 2025.07.17 |
| [Programmers] PCCE 기출문제 10번 - 데이터 분석 - Java (0) | 2025.07.16 |
| [Programmers] PCCP 기출문제 2번 - 퍼즐 게임 챌린지 - Java (0) | 2025.07.15 |