반응형
https://school.programmers.co.kr/learn/courses/30/lessons/250135
아날로그 시계 문제
초침이 시침과 분침과 만나는 횟수를 세는 문제
#사용 알고리즘
구현
반응형
📌문제 접근 포인트
1. 초를 기준으로 해서 시작 시간과 끝 시간까지 전부 탐색을 해주자.
2. 예시를 보면 시작 할 때 초침이 다른 침들과 겹칠 경우 알람이 울린다. 여기서 알람이 울리는 케이스는 0시와 12시 2가지가 존재한다. 이 케이스를 고려하자.
3. 원형 각도를 기준으로(360) 시,분,초를 표현해보자. 초는 1초당 6도, 분은 1초당 6 / 60도씩, 시간은 6 / 60*12도씩 늘어나는 형태고, 이때 각도가 0~360도 모두 측정이 되어야하므로 각도가 360이 되었을때 0으로 초기화 되지않게 값을 설정해주자.
4. 요구 조건에 맞게 초침과 시침이 만났을때, 초침과 분침이 만났을 때 횟수를 증가시키고, 만약 그 케이스가 3개가 모두 겹치는 경우면 1번만 올라가도록 구성해주자.
⚙ 내가 푼 정답 코드
class Solution {
public static double calc(double x){
// % 360에 의해 0이 되어도 360이 되도록 만들기
if (x == 0){
return 360;
}
return x;
}
public int solution(int h1, int m1, int s1, int h2, int m2, int s2) {
int answer = 0;
double start = h1 * 3600 + m1 * 60 + s1;
double end = h2 * 3600 + m2 * 60 + s2;
if (start == 0 || start == 12 * 3600) {
answer += 1;
}
while (start < end) {
// 각도를 기준으로 계산
double h = start / 120 % 360;
double m = start / 10 % 360;
double s = start * 6 % 360;
// 다음 각도 계산
double nh = calc((start + 1) / 120 % 360);
double nm = calc((start + 1) / 10 % 360);
double ns = calc((start + 1) * 6 % 360);
if (s < h && nh <= ns) { // 초침과 시침이 만나면
answer += 1;
}
if (s < m && nm <= ns) { // 초침과 분침이 만나면
answer += 1;
}
if (ns == nh && nh == nm) { // 초침, 시침, 분침이 모두 겹치면
answer -= 1;
}
start += 1;
}
return answer;
}
}
반응형
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 무인도 여행 (Java) (1) | 2024.05.01 |
---|---|
[프로그래머스] 호텔 대실(Java) (0) | 2024.05.01 |
[프로그래머스] 미로 탈출 명령어(Java) (1) | 2024.04.12 |
[프로그래머스] 혼자서 하는 틱택토(Java) (0) | 2024.04.12 |
[프로그래머스] 도넛과 막대 그래프 (Java) (0) | 2024.04.12 |
댓글