오늘은 시간 표시방법을 변환하는 문제를 풀었습니다.
문제
Given a time in 12-hour AM/PM format, convert it to military (24-hour) time.
Note:
Midnight is 12:00:00AM on a 12-hour clock, and 00:00:00 on a 24-hour clock. Noon is 12:00:00PM on a 12-hour clock, and 12:00:00 on a 24-hour clock.
주어진 12시간 표시 방법의 문자열을 24시간 표시법으로 변환하는 문제.
이때 12:00:00AM 은 00:00:00시 이며, 12:00:00PM은 12:00:00시 임.
Sample Input
'07:05:45PM'
Sample Output 0
'19:05:45'
풀이
1. 문자열에서 AM/PM, 시, 분, 초를 각각 slice 로 변수에 할당하고 계산하기
function timeConversion(s) {
let ampm = s.slice(8); //문자열에서 AM/PM 여부를 알 수 있도록 slice
let hh = s.slice(0,2); //시, 분, 초 부분을 각각 slice
let mm = s.slice(3,5);
let ss = s.slice(6,8);
if(ampm === 'PM' && hh !== '12') {
hh = Number(hh) + 12; //slice 하면 문자열이 되므로 숫자로 변환해서 계산
}
if(ampm === 'AM' && hh === '12') {
hh = '00';
}
return `${hh}:${mm}:${ss}`;
}
2. 문자열에서 ':' 을 기준으로 split 해서 계산한 후에 다시 join(':') 해서 리턴하기
function timeConversion(s) {
let splitTime = s.split(':');
let ampm = splitTime[2][2] + splitTime[2][3];
splitTime[2] = splitTime[2][0] + splitTime[2][1];
if (splitTime[0] !== '12') {
splitTime[0] = ampm === 'PM' ? parseInt(splitTime[0]) + 12 : splitTime[0];
} else {
splitTime[0] = ampm === 'AM' ? '00' : splitTime[0];
}
return splitTime.join(':');
}
배운점
코드가독성 이라는게 이런 것인가? 문자열을 필요한 인덱스만 조각조각 이어 붙이는 방식은 한번에 읽기가 힘든듯.
처음부터 명확하게 변수를 할당하는 편이 코드 읽기가 쉬운 것 같다.
다음부터는 문제 풀이 시간도 기록해야겠다.
'Coding > Algorithms' 카테고리의 다른 글
[JavaScript] 피보나치 수 구하기 (0) | 2019.11.20 |
---|---|
[JavaScript] Staircase (0) | 2019.11.17 |