[HackerRank/C++] Super Reduced String

2023. 2. 8. 09:04코딩테스트 해커랭크/Algorithms -Easy

문자열 s를 인자로 받는다

 

만약 문자열 s는 아스키코드로 a~z의 값을 가지며

 

두개의 문자열이 서로 이어져 있다면 그 문자열을 지운다

 

이후 반복하며 남은 문자열을 출력하고, 문자열이 비어있다면 Empty String을 return 한다

string superReducedString(string s)
{
    bool loop = true;

    while (loop)
    {
        loop = false;

        for (int i = 1; i < s.size(); ++i)
        {
            if (s[i] == s[i - 1])
            {
                s.erase(i - 1, 2);
                loop = true;
            }
        }
    }

    return s.length() ? s : "Empty String";
}

루프를 위한 bool 값을 하나 주고, 한번 이상 문자열의 삭제가 일어났다면 문자열이 밀리며 문자열이 바뀌기 때문에 bool 값을 true로, 한번도 삭제가 일어나지 않았다면 false로 while문을 반복한다

 

for 문으로 붙어있는 두개의 문자열을 비교해 같은 문자열이라면 두개의 문자열을 삭제한다

 

조건식에서 s.size() - 1는 절대 안되는데, s.size()의 반환값이 size_t 자료형이며 이는 unsigned 타입이기 때문에 size가 0일때 -1이 일어난다면 언더플로우가 일어나며 잘못된 값을 erase 하려고 할 것이다

 

따라서 i의 기본값을 0이 아닌 1로 두고, i + 1이 아닌 i - 1로 접근하도록 했다

 

이후 삼항연잔자로 s.의 길이를 체크해, 0보다 크다면 s를 return 하고 0이라면 Empty String을 return 한다

'코딩테스트 해커랭크 > Algorithms -Easy' 카테고리의 다른 글

[HackerRank/C++] Strong Password  (0) 2023.02.08
[HackerRank/C++] CamelCase  (0) 2023.02.08
[HackerRank/C++] Big Sorting  (0) 2023.02.08
[HackerRank/C++] Strange Counter  (0) 2023.02.08
[HackerRank/C++] Happy Ladybugs  (0) 2023.02.08