[해커랭크] Time Conversion

Kim Yuhyeon·2023년 10월 18일
0

알고리즘 + 자료구조

목록 보기
144/161

문제

https://www.hackerrank.com/challenges/one-week-preparation-kit-time-conversion/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=preparation-kits&playlist_slugs%5B%5D=one-week-preparation-kit&playlist_slugs%5B%5D=one-week-day-one

접근 방법

문자열 파싱해 시간 변환하기
hh:mm:ssAM or hh:mm:ssPM 형식이므로
12시가 아니고 PM일 경우 시간에 12시간을 더해주고,
12시이고 AM일 경우 시간을 0으로 설정하여
나머지를 출력하였다.
2자리 맞춤출력은 printf를 이용하면 편한데
cout을 사용하기 때문에 10 미만일 경우 0을 더해서 출력하였다.

string to int : sti
int to string : to_string

풀이

string timeConversion(string s) 
{
    
    int h = stoi(s.substr(0, 2));
    
    string ampm = s.substr(8, 10);

    if (ampm == "PM" && h != 12) h += 12;
    else if (ampm == "AM" && h == 12) h = 0; 
    
    string ans; 
    if (h < 9) ans += "0";
    
    ans += to_string(h);
    ans += s.substr(2, 6);
    
    return ans;
}

출제자 풀이

#include<iostream>
#include<cstdio>

using namespace std;

int main() {
    string s;
    cin >> s;

    int n = s.length();
    int hh, mm, ss;
    hh = (s[0] - '0') * 10 + (s[1] - '0');
    mm = (s[3] - '0') * 10 + (s[4] - '0');
    ss = (s[6] - '0') * 10 + (s[7] - '0');

    if (hh < 12 && s[8] == 'P') hh += 12;
    if (hh == 12 && s[8] == 'A') hh = 0;

    printf("%02d:%02d:%02d\n", hh, mm, ss);

    return 0;
}

정리

이렇게 푸는 게 맞나 싶었는데
문자열 파싱하는 부분과 출력하는 부분 빼고 시간 연산 측면은 출제자와 일치한 것 같다.

0개의 댓글