티스토리 뷰

안녕하세요

오늘은 프로그래머스 최솟값 만들기 문제 풀이입니다.

 

문제 링크입니다!

programmers.co.kr/learn/courses/30/lessons/12941

 

코딩테스트 연습 - 최솟값 만들기

길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱

programmers.co.kr

● 문제 간단 설명

주어진 길이가 같은 배열 두 개가 주어질 때,

각 배열의 요소를 1 대 1로 곱한 값들의 합의 최솟값을 구하는 문제입니다.

 

● 문제 해결 방향

최소가 되는 경우는 A 배열에서 최댓값과 B배열에서 최솟값을 곱할 때

그 합이 최소가 될 것이라고 생각했습니다.

 

● 문제 해결 코드

def solution(A,B):
    A.sort()
    B.sort(reverse = True)
    
    answer = sum([ A[a] * B[a] for a in range(len(A))])
    return answer

우선 한 배열은 sort로 오름차순으로 정렬하고, 다른 한 배열은 내림 차순으로 정렬한 후

같은 위치의 요소들을 곱하여 그 합을 구해주는 방식으로 해결하였습니다.

 

이 문제는 그렇게 어려운 문제는 아니었지만

zip함수를 활용한 풀이를 보고 아직 zip함수에 익숙하지 않아

문제 풀이를 통해 눈에 익히려고 이번 문제풀이를 하게 되었습니다.

 

def solution(A,B):
    return sum(a*b for a, b in zip(sorted(A), sorted(B, reverse = True)))

zip함수를 활용하면

똑같이 내림차순, 오름차순한 리스트에서 같은 위치의 값을 곱하여 그 합을 구했습니다.

 

제 풀이와 해석을 같지만 코드 구현하는 방식에서 zip함수를 사용하는 것이 더 깔끔해 보입니다.

 

더 좋은 풀이 방식이 있으시면 언제든 댓글 남겨주세요!

 

이상 최솟값 만들기 문제 풀이였습니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함