Table of contents
www.hackerrank.com/challenges/time-conversion/problem
1. 정리
HackerRank의 Time Conversion 문제로, AM/PM 형식의 시간 string을 24시 string형태로 변환하는 문제입니다. 먼저, 입력과 출력의 예시를 보겠습니다.
입력
12:01:00PM
출력
12:01:00
중요한 부분은 위의 입/출력 부분에서 밑줄 표시된 부분입니다. 앞의 숫자를 int로 변환해야 하므로 int 변수와 string 변수를 선언해보겠습니다. s_tmp의 경우 0번 째, index부터 2글자이므로 "12"가 저장될거에요. 그리고 이것을 int로 변환시키겠습니다. stoi의 경우, "12" 문자열을 12로 변환해주는 함수입니다.
int i_tmp = 0;
string s_tmp = s.substr(0, 2);
i_tmp = stoi(s_tmp);
다음은 PM과 AM에 따른, 문자열 변환 조건문입니다. PM의 경우 현재 hour+12한 값이 24보다 작을 경우에만 12를 더합니다. 그리고 이를 to_string 함수를 이용해 문자열로 만들어 줍니다. 만약, 24보다 작지 않으면 어떠한 변화도 주지 않습니다. 이유는 AM/PM <-> 24시 형태 변환 규칙을 찾아보시면 됩니다.
그리고 AM인 경우에는 hour가 12일 경우에만 "00"시로 변환합니다. 마찬가지로 이유는 AM/PM <-> 24시 형태 변환 규칙을 찾아보시면 됩니다.
* to_string의 예로, to_string("12")는 int형 12가 됩니다.
if (s.substr(8, 9) == "PM") {
if (i_tmp + 12 < 24)
s_tmp = to_string(i_tmp + 12);
}
else {
if (i_tmp == 12)
s_tmp = "00";
}
마지막으로, 변환된 값들을 기존 string에 덮어 씌우고 return하면 해결됩니다.
s[0] = s_tmp[0];
s[1] = s_tmp[1];
return s.substr(0, 8);
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
/*
* Complete the timeConversion function below.
*/
string timeConversion(string s) {
/*
* Write your code here.
*/
int i_tmp = 0;
string s_tmp = s.substr(0, 2);
i_tmp = stoi(s_tmp);
if (s.substr(8, 9) == "PM") {
if (i_tmp + 12 < 24)
s_tmp = to_string(i_tmp + 12);
}
else {
if (i_tmp == 12)
s_tmp = "00";
}
s[0] = s_tmp[0];
s[1] = s_tmp[1];
return s.substr(0, 8);
}
int main()
{
//ofstream fout(getenv("OUTPUT_PATH"));
string s;
getline(cin, s);
string result = timeConversion(s);
cout << result << endl;
//fout << result << "\n";
//fout.close();
return 0;
}
'소프트웨어 > C++' 카테고리의 다른 글
[HackerRank] C++ Staircase (0) | 2022.02.13 |
---|---|
C++ cin, cout 다중 변수 입출력 예제 (0) | 2022.02.13 |
C++ lower_bound, upper_bound 활용하기 (0) | 2022.02.13 |
C++ 주요 STL(Standard Template Library) 내용 정리 (0) | 2022.02.13 |
C++ tuple로 이루어진 vector 요소 추가, 정렬, 출력 (0) | 2022.02.13 |