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