코딩 공부/Leetcode

[Python] 1769. Minimum Number of Operations to Move All Balls to Each Box

일하는 공학도 2025. 1. 15. 13:42
728x90

난이도 : medium (첫번째 medium 문제다..! 그래도 금방 풀었다) 

boxes에 나온 순서대로, "0"은 비어있는 박스고 "1"은 공 1개가 있다.

이것을 하나의 box로 몰아서 옮긴다면, 공을 총 몇 번 움직여야 하는가를,

각 자리별로 계산해야 한다.

 

이번에는 코드를 작성하기 전에 생각을 먼저 했다.

예를 들어 1번 자리에 공이 있다면,

1번에서 다른 자리에 공을 옮기려면 총 몇 번을 움직여야 하는가? 를 리스트로 만들었다.

그 리스트를 1번부터 n번까지 차근차근 더하면 될 것이라 구상했다.

class Solution(object):
    def minOperations(self, boxes):
        """
        :type boxes: str
        :rtype: List[int]
        """
        n = len(list(boxes))
        tem = [0 for i in range(n)]
        for i, num in enumerate(boxes):
            i_list = list(range(n))
            if num == "1":
                num_list = [abs(x-i) for x in i_list]
                tem = [tem[i] + num_list[i] for i in range(n)]
        return tem
  1. boxes를 리스트로 만들고 ("110" -> ["1", "1", "0']), 리스트의 갯수를 box라 명함
  2. boxes와 동일한 갯수를 가진 0만 있는 리스트를 tem이라 정함
  3. i_list는 0부터 n까지 리스트를 제작했다.
  4. num 값이 "1"이라면, x-i를 절대값으로 취한 리스트인 num_list를 제작. 이것이 바로 다른 자리로 공을 옮길 때의 수
  5. tem 리스트에 num_list를 더해줌

Runtime : 3108ms (25.11%)

Memory : 12.93MB (8.41%)

728x90