(구) 개발지식 (공통)/코딩 연습 (문제풀이)

[HackerRank/Easy] Time Convention

WHDE 2021. 9. 13. 02:10

이번에는 너무 단순하게 생각하다가 한참을 해멨다(....)

12AM이면 새벽 12시고 12PM이면 오후 12시여야 하기에 각각 0시와 12시가 나와야 하는데

0시를 24시로 계속 생각하고 있어서 계속 케이스를 통과 못하고 있었다(....)

 

AM PM이 익숙하지 않은데서 온 불상사같다.

아무리 쉬운 알고리즘이라도 다음부터는 종이에 좀 써가면서 풀어야겠다.

머리로만 하니까 한번 헷갈리면 답이 없다.

 

어쨌든 오랫만에 string 관련 함수들을 써봤다.

atoi()나 substr같은 문자열 관련 함수는 java 할때나 한참 썼던거라 C++로 하니 어색했다.

c_str()도 얼마만에 쓴건지(.....)

 

재미있는건 그냥 int + string 하면 암묵적으로 형변환이 되는 것을 이용하려 하니 문법 오류가 났다.

해서 시간은 to_string()함수로 다시 문자열로 바꿔주고 대입했다.

컴파일러마다 다르긴 한 모양이다. 테스트 시에 이런 부분을 직면하면 골치 아플 듯.

 

string timeConversion(string s) {
    int time;
    string minute;
    string second;
    string AP;
    
    time = atoi(s.substr(0, 2).c_str());
    minute = s.substr(3, 2).c_str();
    second = s.substr(6, 2).c_str();
    AP = s.substr(8, 2);
    
    string result;
    
    if(AP == "AM") {
        if(time == 12) {
            time -= 12;
        }
    }
    
    else if(AP == "PM") {
        if(time != 12) time += 12;
        if(time > 24) { 
            time-=24;
        }
    }
    
    result = to_string(time) + ":" + minute + ":" + second;
    
    if(time < 10) {
        result = "0" + result;
    }
    
    return result;
}