개발/Leetcode

Leetcode 735. Asteroid Collision

지산동고라니 2023. 7. 20. 09:46

https://leetcode.com/problems/asteroid-collision/description/

 

Asteroid Collision - LeetCode

Can you solve this real interview question? Asteroid Collision - We are given an array asteroids of integers representing asteroids in a row. For each asteroid, the absolute value represents its size, and the sign represents its direction (positive meaning

leetcode.com

문제

소행성의 정보를 정수로 담고 있는 asteroids 배열이 주어진다. 배열에 담겨 있는 각 소행성의 절대값은 소행성의 크기를 나타내며 부호는 소행성이 날아가고 있는 방향을 의미한다(음수는 왼쪽, 양수는 오른쪽) 각 소행성은 똑같은 속도로 움직이고 있다.

 

위의 정보를 바탕으로 소행성이 모두 충돌하고 난 후의 상태를 찾는 것이 목표이다. 충돌의 경우 절대값이 낮은 소행성이 부숴진다. 만약 같은 사이즈의 소행성이 충돌하는 경우는 모두 파괴되는 것으로 한다. 같은 방향으로 움직이는 소행성은 절대 만나지 않는다.

 

코드

class Solution:
    def asteroidCollision(self, asteroids: List[int]) -> List[int]:
        alive = []
        asteroids = asteroids[::-1]
        s = []
        while asteroids:
            asteroid = asteroids.pop()
            if asteroid < 0 and not s:
                alive += [asteroid]
            elif asteroid < 0 and s:
                # 1 1, asteroid == -1
                while s:
                    if abs(asteroid) > s[-1]:
                        s.pop()
                        if not s:
                            alive += [asteroid]
                    elif abs(asteroid) == s[-1]:
                        s.pop()
                        break
                    else:
                        break
            elif asteroid > 0:
                s += [asteroid]
                   
        alive += s
               
        return alive

스택을 이용한다면 금방 풀수 있는 문제!