ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1217. Play with Chips
    Algorithm/LeetCode 2020. 5. 28. 13:40
    728x90

    출처: leetcode.com/problems/play-with-chips/

    분류: Greedy, Easy


    접근방식

    문제 자체를 이해하기가 어려웠던 문제였습니다. 

    간단히 요약하면, 

    chips 에는 chip이 있는 index 가 적혀있습니다. 

    즉, chips = [2,2,2,3,3] 이렇게 주어져 있다면, 아래와 같은 모습으로 생각할 수 있습니다.

    칩이 있는 인덱스 1 2 3
    칩의 개수 0 3 2

    이 칩들은 좌우로 2칸을 움직일 때는 비용이 없고 1칸을 움직일 때는 1의 비용이 듭니다.

    여기서 이 칩을 한 곳으로 모으는 방법은 2가지 방법이 있습니다.

    2에 있는 칩3개를 3으로 옮기는 방법 --> 비용 2
    3에 있는 칩 2개를 2로 옮기는 방법 --> 비용 3

    당연히 3을 2로 옮기는게 좋겠죠??

    다음으로 제한사항을 보면 칩의 개수는 1 ~ 100개밖에 안되지만 인덱스는 1 <= chips[i] <= 10^9 의 범위를 가지고 있죠.
    인덱스가 굉장히 크지만 잘 생각해보면 인덱스는 짝수인지 홀수인지 정도의 의미만 가질 뿐 수의 크기 자체는 중요하지 않다는 것을 알 수 있습니다.  

    해결방법

    어차피 짝수 인덱스에 있는 칩들은 비용없이 한 곳으로 모을 수가 있습니다. 홀수도 마찬가지죠.

    결국 짝수 인덱스에 있는 칩과 홀수 인덱스에 있는 칩의 수를 계산해서 더 적은 쪽을 옮겨주는게 최소비용이 됩니다. :)

    chips를 돌면서 짝수, 홀수의 개수를 체크해준 다음 더 적은 쪽을 리턴해주면 되겠죠?

    func minCostToMoveChips(_ chips: [Int]) -> Int {
      var even = 0
      var odd = 0
    
      for chipPosition in chips {
        if chipPosition % 2 == 0 {
        	even += 1
        } else {
        	odd += 1
        }
      }
    
      return even >= odd ? odd : even
    }

     

    배운점

    풀이 자체는 간단했지만 문제자체를 이해하기가 쉽지 않았던 문제였습니다. 

     

     

    'Algorithm > LeetCode' 카테고리의 다른 글

    1005. Maximize Sum Of Array After K Negations  (0) 2020.06.04
    1029. Two City Scheduling  (0) 2020.06.04
    1046. Last Stone Weight  (0) 2020.05.31
    1221. Split a String in Balanced Strings  (0) 2020.05.23

    댓글

Designed by Tistory.