728x90
처음 든 생각
- 순차적으로 곱해주는데 곱하는 수들의 조합을 어떻게 해줘야될까
- 가장 큰 놈이랑 가장 작은 놈이랑 곱해주고 이런 식으로 큰 수 x 작은 수 조합으로 계속 곱해야겠네
나의 답
def solution(A,B):
answer = 0
A = sorted(A)
B = sorted(B,reverse=True)
for i in range(len(A)):
answer += A[i] * B[i]
return answer
하나의 배열은 내림차순, 다른 배열은 오름차순으로 정렬을 하였다.
그 다음 반복문을 돌면서 같은 인덱스를 참조하며 곱한 값을 더해준다.
그리디의 가장 일반적인 케이스라고 생각된다. 큰 수를 가장 적게 더해주는 방식으로 차근차근 나아가면 되는 방식으로 해결되는 문제였다.
다른 사람의 답
def getMinSum(A, B):
return sum([a * b for a, b in zip(sorted(A), sorted(B, reverse=True))])
내가 푼 방식과 아이디어는 동일했으나 코드 구현을 한 줄로 완성시킬 수도 있었다.
길이가 같기 때문에 zip을 활용하면 순서대로 하나씩 묶인 튜플로 만든 다음 거기서 두 수의 곱을 리스트의 원소로 불러온 코드다.
그 다음 리스트의 sum으로 답을 낸 것이다.
길이가 같고 서로 연계된 작업을 진행할 때 zip을 쓸 수 있다는 점은 항상 염두에 둬야할 것 같다.
앞으로도 잘 떠올려보자.
728x90
'스터디 > 코딩테스트' 카테고리의 다른 글
python 코딩테스트 - 프로그래머스 다음 큰 숫자 (3) | 2023.12.05 |
---|---|
python 코딩테스트 - 프로그래머스 이진 변환 반복하기 (0) | 2023.12.04 |
python 코딩테스트 - 2022 카카오 인턴 기출 2번 (1) | 2023.11.24 |
python 코딩 테스트 - 카카오 2022 인턴 기출 1번 (1) | 2023.11.23 |
python 코딩테스트 - 프로그래머스 구명보트 (1) | 2023.11.17 |