Table of contents

www.hackerrank.com/challenges/time-conversion/problem

 

Time Conversion | HackerRank

Convert time from an AM/PM format to a 24 hour format.

www.hackerrank.com

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;
}