Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 소프티어
- SQL
- dfs
- 파이썬
- Lv. 1
- 너비 우선 탐색
- select
- bfs
- SQL 고득점 KIT
- Lv. 2
- join
- Java
- group by
- Dynamic Programming
- C언어
- DP
- 동적계획법
- LEVEL 2
- javascript
- Lv. 3
- 티스토리챌린지
- Python
- programmers
- Lv. 0
- softeer
- 자바스크립트
- 깊이 우선 탐색
- 오블완
- level 3
- 프로그래머스
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 2] 아날로그 시계 {언어 : JavaScript} [암기하기] 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/250135
정답 코드
function solution(h1, m1, s1, h2, m2, s2) {
const getCounts = (h, m, s) => {
let cntH = h * 60 + m;
let cntM = h * 59 + m;
let counts = -1;
if (h >= 12) {
[cntH, counts] = [cntH-1, counts-1];
};
const degreeH = (h % 12) * 30 + m * 0.5;
const degreeM = m * 6;
const plusH = degreeH <= s * (6 - (1 / 120));
const plusM = degreeM <= s * 5.9;
cntH = plusH ? cntH + 1 : cntH;
cntM = plusM ? cntM + 1 : cntM;
counts += cntH + cntM;
return counts;
};
const counts = getCounts(h2, m2, s2) - getCounts(h1, m1, s1);
const answer = s1 == 0 && m1 == 0 ? counts + 1 : counts;
return answer;
}
풀이 방법
1. getCounts 함수 정의
목적:
주어진 시각까지 조건을 만족하는 시각이 몇 번인지 계산하는 함수이.
설명:
- 입력: h, m, s (시, 분, 초)
- 계산 과정:
- cntH와 cntM 초기화:
- cntH = h * 60 + m (시를 분으로 변환 후 분과 합산)
- cntM = h * 59 + m (시를 59로 곱한 후 분과 합산)
- 초기 counts를 -1로 설정
- 12시 이상일 경우 cntH와 counts를 1씩 감소
- 시침(degreeH)과 분침(degreeM)의 각도를 계산:
- degreeH = (h % 12) * 30 + m * 0.5
- degreeM = m * 6
- 초침의 각도와 비교하여 cntH와 cntM을 증가:
- 시침 각도가 s * (6 - (1 / 120))보다 작거나 같으면 plusH는 1
- 분침 각도가 s * 5.9보다 작거나 같으면 plusM은 1
- plusH와 plusM을 더해서 cntH와 cntM을 각각 증가 (true면 1 false는 0)
- 최종적으로 cntH와 cntM의 합을 counts에 더해 반환
- cntH와 cntM 초기화:
2. 메인 로직
목적:
주어진 두 시간 사이에 조건을 만족하는 시각의 수를 계산한다.
설명:
- h1, m1, s1에서 h2, m2, s2까지의 조건 만족 횟수를 계산
- getCounts 함수를 호출하여 두 시각에 대한 값을 얻음
- 두 값을 빼서 사이의 조건 만족 횟수를 구함
- s1과 m1이 모두 0일 경우 결과에 1을 더함 (정확히 h1:m1에서 시작하기 때문)
3. 결과 반환
목적:
최종 계산된 값을 반환한다.
설명:
- 두 시간 사이에 조건을 만족하는 시각의 수를 반환
느낀점
- 너무 어렵고 다시 풀어도 틀릴 것 같아서 암기하려고 한다.
'알고리즘' 카테고리의 다른 글
프로그래머스 [Lv. 2] 124 나라의 숫자 {언어 : Python} [3진법] (0) | 2024.05.30 |
---|---|
프로그래머스 [Lv. 2] 3 x n 타일링 {언어 : Java} (0) | 2024.05.29 |
프로그래머스 [Lv. 2] 땅따먹기 {언어 : Python} (0) | 2024.05.20 |
프로그래머스 [Lv. 2] 멀리 뛰기 {언어 : JavaScript} (0) | 2024.05.20 |
프로그래머스 [Lv. 2] 숫자의 표현 {언어 : JavaScript} (0) | 2024.05.19 |