본문 바로가기

Algorithm/String

(C++) - LeetCode (easy) 1736. Latest Time by Replacing Hidden Digits

반응형

https://leetcode.com/problems/latest-time-by-replacing-hidden-digits/description/

문자열을 다뤄보는 문제였습니다.

📕 풀이방법

📔 풀이과정

각 time의 자리별 ?가 들어올 경우를 따져 적절한 숫자로 치환해줍니다.

즉, xx:xx의 형식에서 x에 해당하는 부분의 index를 0,1,3,4일 때 '?'가 input으로 들어오므로 해당 경우를 확인해줍니다.

1. time[0]이 '?'인 경우

   1-1. 그 다음자리인 time[1]이 '4'이상이면서 ?가 아니라면 :왼편 문자열이 "?4" 또는 "?5" ...이므로 time[0]은 1이어야합니다.

   1-2. 이외의 경우에는 :왼편 문자열이 "?0", "?1", "?2", "?3" 이 되므로 time[0]이 '2'가 가능합니다.

2. time[1]이 '?'인 경우

    time[0]은 가능한 늦은 시각으로 치환되었으니 다음 경우만 확인해주면 됩니다.

   2-1. time[0]이 2가 아니면서 ?가 아니면 "1?"형식이므로 time[1]은 '9'가 됩니다. 

   2-2. 이외의 경우 "2?"형식이므로 '3'이 됩니다.

3. time[2]이 '?'인 경우 무조건 '5'가 됩니다.

4. time[3]이 '?'인 경우 무조건 '9'가 됩니다.

📔 정답 출력 | 반환

치환된 time을 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    string maximumTime(string time) {
        if(time[0] == '?') {
            if(time[1] >= '4' && time[1] != '?') time[0] = '1';
            else time[0] = '2';
        }
        if(time[1] == '?') {
            if(time[0] != '2' && time[0] != '?') time[1] = '9';
            else time[1] = '3';
        }
        if(time[3] == '?') time[3] = '5';
        if(time[4] == '?') time[4] = '9';
        return time;
    }
};

📕 Test Case

 몇 가지 반례를 직접 작성해 보았습니다. 

input

"??:1?"

"23:19"

input

"?5:?3"

"15:53"

input

"2?:??"

"23:59"


*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.