반응형

 

문제)

소행성을 연속적으로 나타내는 정수 배열 asteroids가 제공된다 .

각 소행성에 대해 절대값은 크기를 나타내고 부호는 방향을 나타낸다.(양수는 오른쪽, 음수는 왼쪽을 의미)

각 소행성은 같은 속도로 움직인다.

두 소행성이 만나면 작은 소행성이 폭발한다.

둘 다 같은 크기이면 둘 다 폭발한다.

같은 방향으로 움직이는 두 소행성은 결코 만날 수 없다.

 

모든 충돌후 소행성의 상태를 반환해주면 되는 문제.

 

문제 난이도 : 중

 

소요시간 및 풀이)

조건이 단순해서 단순하게 조건을 나열해서 풀었다.

 

소요 시간 : 31분

 

정답 코드

 

class Solution
{
public:
    vector<int> asteroidCollision(vector<int>& asteroids)
    {
        int preCnt = 1;
        int curCnt = 0;

        while (preCnt != curCnt)
        {
            preCnt = asteroids.size();

            for (int i = 0; i < asteroids.size(); i++)
            {
                if (asteroids[i] < 0 && i != 0)
                {
                    if (asteroids[i - 1] < 0 && asteroids[i] < 0)
                        continue;

                    if (abs(asteroids[i - 1]) > abs(asteroids[i]))
                    {
                        asteroids.erase(asteroids.begin() + i);
                    }
                    else if (abs(asteroids[i - 1]) < abs(asteroids[i]))
                    {
                        asteroids.erase(asteroids.begin() + i - 1);
                    }
                    else if (abs(asteroids[i - 1]) == abs(asteroids[i]))
                    {
                        asteroids.erase(asteroids.begin() + i);
                        asteroids.erase(asteroids.begin() + i-1);
                    }
                }
            }

            curCnt = asteroids.size();
        }

        return asteroids;
    }
};
반응형