사이트: HackerRank
난이도: 미디움
시간과 분이 파라미터로 넘어오며 분에 따라 알맞은 표현방식으로 반환하는 문제이다.
문자열 조합 문제라서 어렵지 않게 작성하였던 것 같다.
function timeInWords(h, m) {
// Write your code here
const units = [
'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',
'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen',
'eighteen', 'nineteen', 'twenty'
];
let hour = units[(12 + (m > 30 ? h : h - 1)) % 12],
minute;
if (m === 0) {
return `${hour} o' clock`;
}
if (m === 30) {
minute = 'half';
} else if (Math.abs(m - 30) === 15) {
minute = 'quarter';
} else {
minute = m > 30 ? 60 - m : m;
minute = minute > 20
? `${units[19] } ${units[minute - 21]} minutes`
: `${units[minute - 1]} ${minute === 1 ? 'minute' : 'minutes'}`;
}
return `${minute} ${m > 30 ? 'to' : 'past'} ${hour}`;
}
바로 풀 수 있었던 문제들은 지금은 생략하고 추후 더 효율적인 문제 풀이법을 찾아보도록 하겠다.