본문 바로가기

Coding/Algorithms

[JavaScript] Time conversion: 시간 변환

오늘은 시간 표시방법을 변환하는 문제를 풀었습니다.

 

문제 

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