CS기초/코딩테스트

LeetCode 1217 (Easy) Minimum Cost to Move Chips to The Same Position

오늘의 나1 2021. 2. 24. 23:36
출처: leetcode.com/problems/minimum-cost-to-move-chips-to-the-same-position/
 

Minimum Cost to Move Chips to The Same Position - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제

한글 번역은 아래 더보기를 클릭해주세요. 

더보기

i번째 칩의 위치가 position[i]를 나타내는 n개의 칩이 있다.

모든 칩을 같은 위치로 옮겨야 한다. 한 번에, i번째 칩의 위치를 position[i]에서 다음으로 옮길 수 있다:

  • position[i] + 2 또는 position[i] - 2로, cost = 0.
  • position[i] + 1 또는 position[i] - 1로, cost = 1.

모든 칩을 같은 위치로 옮기는 데 드는 최소 비용을 구해라.

 

예제 1:

  • 입력: position = [1,2,3]
  • 출력: 1
  • 설명: 첫 번째 이동: 위치 3인 칩을 위치 1로 옮긴다. cost = 0이다. 두 번째 이동: 위치 2인 칩을 위치 1로 옮긴다. cost = 1이다. 총 비용은 1이다.

예제 2:

  • 입력: position = [2,2,2,3,3]
  • 출력: 2
  • 설명: 위치 3에 있는 칩 2개를 위치 2로 옮긴다. 각각 이동하는 데 cost = 1이다. 총 비용은 2이다.

예제 3:

입력: position = [1,1000000000]

출력: 1

 

제약조건:

  • 1 <= position.length <= 100
  • 1 <= position[i] <= 10^9

풀이

해결방법

We need to move all the chips to the same position. In one step, we can change the position of the ith chip from position[i] to:
1. position[i] + 2 or position[i] - 2 with cost = 0.
2. position[i] + 1 or position[i] - 1 with cost = 1.

홀수 칸, 짝수 칸에 있는 칩의 갯수를 구하고

홀수 칸의 칩의 갯수와 짝수 간의 칩의 갯수를 비교하여 

더 적은 수의 칩을 반대 칸으로 옮긴다.

 

javascript

var minCostToMoveChips = function(position) {
    let odd = 0;
    let even = 0;
    
    // 홀수 칸, 짝수 칸에 있는 칩의 갯수를 구하고
    position.forEach(pos => {
        if (pos % 2 === 0) {
            even += 1;
        } else {
            odd += 1;
        }
    });
    
    // 홀수 칸의 칩의 갯수와 짝수 간의 칩의 갯수를 비교하여 
    // 더 적은 수의 칩을 반대 칸으로 옮긴다.
    return Math.min(even, odd);
};

python

class Solution:
    def minCostToMoveChips(self, position: List[int]) -> int:
        odd = 0
        even = 0
        
        # 홀수 칸, 짝수 칸에 있는 칩의 갯수를 구하고
        for pos in position:
            if pos % 2 == 0:
                even += 1
            else:
                odd += 1
        
        # 홀수 칸의 칩의 갯수와 짝수 간의 칩의 갯수를 비교하여 
        # 더 적은 수의 칩을 반대 칸으로 옮긴다.
        
        return min(even, odd)

결과