스터디/코딩테스트

python 코딩테스트 - 프로그래머스 최솟값 만들기

공대생철이 2023. 12. 4. 13:53
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