파이썬으로 배우는 알고리즘 책을 공부하며 풀었던 LeetCode문제들을 재정리해보자.
# 문제 설명
561번 Array Partition I은 n개의 페어를 이용한 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하는 문제이다.
이 문제는 내가 지금까지 풀었던 문제들 중 가장 효율적으로 작성한 풀이이지 않나 싶다. 규칙을 찾아서 풀어서 효율적으로 나온거 같기도 하다..😀
책 풀이 확인해보니까 내가 푼 방법과 유사하여 따로 설명은 생략하겠다.
# 풀이방법 1 - 단순 list와 for문으로 판별 (내 풀이 - 효율적)
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
nums.sort()
result = 0
for _min in nums[::2] :
result += _min
return result
'''
규칙 :
- 내림차순 및 오름 차순 정렬 후 순서대로 2개씩 짝지어 min 값을 넣으면 됨
- 어떻게 보면 홀수번째의 합을 구하면 됨
'''
| 규칙 |
내림차순 및 오름차순 정렬 후 순서대로 2개씩 짝지어 min 값을 넣으면 됨
어떻게 보면 홀수번째의 합을 구하면 됨
| 핵심 |
for _min in nums[::2] :
# [::2]는 2칸씩 뛰어 넘음(홀수번째 가능)
| 알고리즘 예시 적용 (규칙 설명) |
[6,2,6,5,1,2]
# 그냥 시도
6,5 ->5
6,2 ->2
1,2 -> 1
8
# !규칙 적용 시!
6,6 ->6
2,5 ->2
1,2 ->!
=>9
---------------
[1,2,3,4]
# 그냥 시도
1,4 ->1
2,3 -> 2
# !규칙 적용 시!
3,4 ->3
1,2 -> 1
=> 4
------------
[1,1,2,2,3,3,4,4]
# 그냥 시도
4,3->3
4,3 ->3
1,2 ->1
1,2 ->1
-> 8
# !규칙 적용 시!
4,4 ->4
3,3 ->3
2,2 ->2
1,1 -> 1
=>10
-----------------------------
[1,2,5,7,7,8,8,8]
# 그냥 시도
8,7 ->7
8,7 ->7
8,5 ->5
2,1->1
-> 20
# !규칙 적용 시!
8,8,->8
8,7->7
7,5->5
2,1 ->1
=>21
----------------
규칙 :
내림차순 및 오름차순 정렬 후 순서대로 2개씩 짝지어 min 값을 넣으면 됨
어떻게 보면 홀수번째의 합을 구하면 됨
# 결과
'#️⃣ Project 및 개발일지 > Algorithm 문제 풀이' 카테고리의 다른 글
[LeetCode] 234. Palindrome Linked List 팰린드롬 연결리스트 (0) | 2022.02.06 |
---|---|
[LeetCode_15] 세 수의 합 (0) | 2022.02.06 |
[LeetCode_121] 주식을 사고팔기 가장 좋은 시점 (0) | 2022.02.06 |
[LeetCode_238] 자신을 제외한 배열의 곱 (0) | 2022.02.06 |
[LeetCode_5] 가장 긴 팰린드롬 부분 문자열 (0) | 2022.02.06 |