-
1217. Play with ChipsAlgorithm/LeetCode 2020. 5. 28. 13:40728x90
출처: 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