📝 문제
> 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.
https://programmers.co.kr/learn/courses/30/lessons/12941
코딩테스트 연습 - 최솟값 만들기
길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱
programmers.co.kr
🎨 풀이
💡 첫 번째 시도 = 성공
def solution(A,B):
answer = 0
A.sort()
B.sort(reverse=True)
for i in range(len(A)):
answer += A[i] * B[i]
return answer
> 핵심 : 가장 큰 수 끼리 곱해지는 불상사가 없도록 정렬을 다르게 해준 후 차례대로 곱한다.
1. A는 오름차순으로, B는 내림차순으로 정렬한다.
2. A[i] 와 B[i] 를 곱해준 후 answer에 넣는다.
- A[i]와 B[i]의 길이가 같다고 했으니 len(A)를 적어주면 된다.
* 오름차순, 내림차순으로 정렬하지 않았을 때와 비교
- A = [1,7,2] B=[2,3,6] 가 있을 때,
- 정렬 안 했을 때 : 2 + 21 + 12 = 35
- 정렬했을 때 : 6 + 6 + 14 = 26 // A = [1,2,7] B = [6,3,2]
- 둘다 오름차순으로 통일했을 때 : 2 + 6 + 42 = 50 // A = [1,2,7] B = [2,3,6]
=> answer이 최대로 나오고 싶으면 둘 다 오름차순이나 내림차순으로 통일해서 정렬한 후 곱하면 된다.
(큰 수들 모이게 하면 몰아주는 느낌이 나서 수가 엄청 커짐)

끝~
⭐ 느낀점
> LEVEL 2인거 치고는 그래도 해볼만한,,, 그런 느낌~ ㅎㅎ. 아마 프로그래머스 2를 다 풀기에는 실력이 부족하니 백준으로 한 번 더 공부를 하지 않을까 싶당 ㅎㅎ. 화이팅!!!!!!!!!!!!
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] 문자열 다루기 기본 (파이썬) (0) | 2022.05.05 |
---|---|
[프로그래머스 / Level 2] 전화번호 목록 (파이썬) (0) | 2022.05.04 |
[프로그래머스 / Level 2] 최댓값과 최솟값 (파이썬) (0) | 2022.05.02 |
[프로그래머스 / Level 1] 이상한 문자 만들기 (파이썬) (0) | 2022.05.01 |
[프로그래머스 / Level 1] 약수의 합 (파이썬) (0) | 2022.04.30 |