문제 정의
초(second) 단위의 숫자를 입력받아, 해당 값에 포함된 시간(hours)과 분(minutes)을 계산하여 문자열 형태로 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어 3601초가 주어졌다면, 이는 1시간 0분에 해당하므로 다음과 같은 결과가 출력되어야 합니다.
입력 예시
const seconds = 3601;
출력 예시
"1 hour(s) and 0 minute(s)"
해결 접근 방식
이 문제는 간단한 나눗셈 연산으로 해결할 수 있습니다.
- 시간 계산: 전체 초를 3600(1시간 = 3600초)으로 나눈 후 정수 부분만 취합니다.
- 분 계산: 시간을 제외한 나머지 초를 60(1분 = 60초)으로 나눈 후 정수 부분만 취합니다.
소수점 이하를 버리기 위해 parseInt() 또는 Math.floor()를 사용할 수 있습니다.
구현 코드
다음은 위 로직을 구현한 전체 코드입니다.
const seconds = 3601;
const toTime = (seconds = 60) => {
const hR = 3600; // 1시간 = 3600초
const mR = 60; // 1분 = 60초
// 시간 계산
let h = parseInt(seconds / hR);
 // 남은 초에서 분 계산
let m = parseInt((seconds - (h * 3600)) / mR);
let res = '';
res += `${h} hour(s) and ${m} minute(s)`;
return res;
};
console.log(toTime(seconds));실행 결과
"1 hour(s) and 0 minute(s)"
코드 설명
함수 내부 동작을 단계별로 살펴보면 다음과 같습니다.
seconds / hR: 3601 ÷ 3600 = 1.00027...이므로parseInt()를 통해 1시간을 얻습니다.seconds - (h * 3600): 3601 − 3600 = 1초가 남습니다.- 남은 1초를 60으로 나누면 0.0166...이므로 0분이 됩니다.
- 최종적으로 템플릿 리터럴을 사용해 결과 문자열을 조립하여 반환합니다.
추가 팁: 초까지 포함하기
만약 결과에 초(seconds)도 함께 표시하고 싶다면 아래와 같이 확장할 수 있습니다.
const toTimeFull = (seconds = 60) => {
const h = Math.floor(seconds / 3600);
const m = Math.floor((seconds % 3600) / 60);
const s = seconds % 60;
return `${h} hour(s), ${m} minute(s), ${s} second(s)`;
};
console.log(toTimeFull(3665)); // "1 hour(s), 1 minute(s), 5 second(s)"나머지 연산자(%)를 활용하면 뺄셈 없이도 더 간결하게 표현할 수 있다는 점도 참고하면 좋습니다.