[HackerRank/C++] Happy Ladybugs

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

문자열 b를 받으며 A~Z의 아스키 코드값과 _를 값으로 가지고 있다

 

A~Z는 Ladybugs이며 _는 빈 공간으로 Ladybugs가 이동할 수 있는 공간이다

 

Ladybugs는 양 옆에 같은 종류의 Laybugs가 있으면 Happy하다고 한다

 

해당 배열에서 빈공간으로 움직이며 모든 Ladybug가 Happy할 수 있다면 YES, 불가능하다면 NO를 return한다

string happyLadybugs(string b)
{
    bool under = false;
    for (const auto& i : b)
        if (i == '_')
            under = true;
            
    if (!under)
    {
        for (int i = 0; i < b.size(); ++i)
        {
            if (i - 1 >= 0)
                if (b[i] == b[i - 1])
                    continue;
                    
            if (i + 1 < b.size())
                if (b[i] == b[i + 1])
                    continue;
                    
            return "NO";
        }
        return "YES";
    }
    else
    {
        sort(b.begin(), b.end());
        
        for (int i = 0; i < b.size(); ++i)
        {
            if (b[i] == '_')
                continue;
            
            if (i - 1 >= 0)
                if (b[i] == b[i - 1])
                    continue;
                    
            if (i + 1 < b.size())
                if (b[i] == b[i + 1])
                    continue;
                    
            return "NO";
        }
        return "YES";
    }
}

첫번째로 자유롭게 움직일 수 있는 빈 공간이 존재하는지 검사한다

 

만약 빈 공간이 없다면 자유롭게 움직일 수 없으므로 해당 배열을 검사하며 양 옆에 같은 종류의 Ladybugs가 있는지 확인하고, 없는 케이스가 있다면 NO를, 모두 옆에 존재한다면 YES를 return 한다

 

빈 공간이 존재한다면 Ladybugs가 자유롭게 움직일 수 있으므로 sort 함수를 이용해 모든 값을 정렬시켜준다

 

이 후 마찬가지로 배열을 검사하며 양 옆에 같은 종류의 Ladybugs가 있는지 확인한 후 결과를 return 한다