문제 설명

주어진 12 시간 (AM / PM) 시스템을 24 시간 시스템으로 변환하시오.

참고: 자정은 12 시간제에서 12:00:00AM 로, 24 시간제에서 00:00:00 로 표기하고 정오는 12 시간제에서 12:00:00PM, 24 시간제에서 12:00:00 로 표기한다.


함수 설명

아래의 timeConversion 함수를 완성하시오. 반환 값은 입력 값을 24 시간제로 표현할 수 있는 새로운 문자열이어야 한다. 

timeConversion 함수는 다음과 같은 매개변수를 가진다.

  • s : 12 시간제 형식의 문자열


입력값 형식

문자열 s는 12 시간제를 의미하는 시간을 담고 있다. (예를 들면 hh:mm:ssAM 이나 hh:mm:ssPM 과 같은 형식)
  • 01 ≤ hh ≤ 12
  • 00 ≤ mm, ss ≤ 59

조건

  • 모든 입력 값은 유효한 시간 값이다.

결과 값 형식

24 시간제 형식으로 변환해 반환한다. 

  • 00 ≤ hh ≤ 23


예시

입력
07:05:45PM


출력

19:05:45



문제 풀이

들어오는 시간 값이 문자열인데 항상 PM 혹은 AM 을 붙인 상태에서 들어오므로 이를 이용해 오전, 오후로 구간대를 나눠서 해결할 수 있어보입니다. 문자열에서 특정한 문자로 끝나는 경우를 조사하고 싶을 땐 endsWith 라는 메소드를 사용하면 간단하지만, Hacker Rank 의 Node 가 해당 메소드를 지원하는지 알 수 없으니 정규식으로 수행합니다. 문제에서 PM / AM 이 대소문자 중 어느것으로 들어올지에 대해 알려주지 않았으므로 모두 검사를 수행하는게 나을 듯 합니다.


풀이의 흐름은 다음과 같습니다.

  1. 입력 값이 PM 이라는 문자열을 갖고 있는지 확인합니다.
  2. PM 혹은 AM 을 빈 문자열로 치환 후 문자열을 쪼갭니다.
  3. 쪼갠 문자 배열 중 가장 앞 부분에 해당하는 시간을 Int 형으로 변환합니다.
  4. 현재 시간이 12:xxPM , 12:xxAM 중 하나에 해당하는지 검사합니다.
  5. 각 타임 구간에 맞게 시간을 +12 혹은 -12 연산을 합니다.
  6. 계산 된 시간이 한 자릿수라면 앞에 0 을 붙여줍니다.
  7. 쪼갰던 요소를 하나로 합쳐서 반환합니다.

위 과정은 다음과 같습니다.




여기서 우리가 주의해야 할 점은 12 시간제에서 12:00:00PM ~ 12:59:59PM, 12:00:00AM ~ 12:59:59AM 은 24 시간제에서도 12시로 표현한다는 점입니다.


저는 24 시간제를 사용하고 있기 때문에 12 시간제의 이런 예외처리에 대해 많이 헷갈렸네요. 솔직히 지금도 헷갈립니다 ;;

어쨌든, 이 문제는 해당 특정 구간대에만 예외처리를 넣어주면 간단하게 해결할 수 있습니다.



+ Recent posts