문자열 파싱해 시간 변환하기
hh:mm:ssAM
orhh: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;
}
이렇게 푸는 게 맞나 싶었는데
문자열 파싱하는 부분과 출력하는 부분 빼고 시간 연산 측면은 출제자와 일치한 것 같다.