[프로그래머스] 최솟값 만들기 / Python

2021. 1. 16. 21:57·Programmers
반응형

문제주소 :programmers.co.kr/learn/courses/30/lessons/12941


<문제 설명>

더보기

문제 설명

길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.)

예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면

  • A에서 첫번째 숫자인 1, B에서 두번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5)
  • A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = 21)
  • A에서 세번째 숫자인 2, B에서 첫번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 21 + 8(2x4) = 29)

즉, 이 경우가 최소가 되므로 29를 return 합니다.

배열 A, B가 주어질 때 최종적으로 누적된 최솟값을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 배열 A, B의 크기 : 1,000 이하의 자연수
  • 배열 A, B의 원소의 크기 : 1,000 이하의 자연수

입출력 예

A                                               B                                               answer
[1, 4, 2] [5, 4, 4] 29
[1,2] [3,4] 10

 

<풀이법>

▒ 한줄 개념: 작은 수 * 큰 수, 큰 수 * 작은 수 ▒ 

두 배열의 모든 원소들을 중복없이 각각 곱해줘서 최소값을 뽑아내는 문제입니다.

A = [1,2,3] 
B = [3,4,5]

위의 예시의 경우, 1*3 + 2*4 + 3*5 = 26 이 하나의 해가 될 수 있겠습니다.

이러한 해 중에 최소값을 구해야 하는데, 그러려면 A는 작은 수부터 뽑아서, B는 큰 수부터 뽑아서 곱하면 최솟값이 나오게 됩니다.

 

따라서 A와 B를 둘 다 정렬하되, 하나는 오름차순, 하나는 내림차순으로 정렬하여 각 인덱스별로 곱해준 값을 최종적으로 하나의 값으로 더하면 답이 됩니다.

 

<코드(Python)>


def solution(A,B):
    return sum(list(map(lambda x:x[0]*x[1], zip(sorted(A),sorted(B, reverse=True)))))

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형

'Programmers' 카테고리의 다른 글

[프로그래머스] 후보키 / Python / (반례 포함)  (0) 2021.01.18
[프로그래머스] 오픈채팅방 / Python  (0) 2021.01.16
[프로그래머스] 큰 수 만들기 / Python  (0) 2021.01.16
[프로그래머스] 최댓값과 최솟값 / Python  (0) 2021.01.15
[프로그래머스] JadenCase 문자열 만들기 / Python  (0) 2021.01.15
'Programmers' 카테고리의 다른 글
  • [프로그래머스] 후보키 / Python / (반례 포함)
  • [프로그래머스] 오픈채팅방 / Python
  • [프로그래머스] 큰 수 만들기 / Python
  • [프로그래머스] 최댓값과 최솟값 / Python
개발하는 사막여우
개발하는 사막여우
개발개발 주저리주저리
    반응형
  • 개발하는 사막여우
    개발하는 사막여우
    개발하는 사막여우
  • 전체
    오늘
    어제
    • All (311)
      • Books (13)
        • 읽기 좋은 코드가 좋은 코드다 (13)
      • Study (6)
        • Blockchain (3)
        • Algorithm (3)
      • Baekjoon (36)
      • Programmers (166)
      • LeetCode (15)
      • Open Source (1)
        • Youtube Popout Player (1)
      • Language (32)
        • Python (9)
        • JS (8)
        • Java (5)
        • HTML (6)
        • CSS (4)
      • Library & Framework (15)
        • React.js (15)
      • IDE (2)
        • IntelliJ (2)
      • Airdrop (9)
      • Tistory (2)
      • etc.. (7)
        • Cozubi (6)
        • lol-chess (0)
  • 블로그 메뉴

    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    백준
    카카오 코딩테스트
    파이썬
    프로그래머스
    programmers
    카카오 공채
    코인줍줍
    읽기 좋은 코드가 좋은 코드다
    Cozubi
    Java
    클린 코드 작성법
    카카오 알고리즘 문제
    프로그래머스 위클리 챌린지
    코주비
    2018 KAKAO BLIND RECRUITMENT
    Python
    클린 코드
    신규 코인 에어드랍
    알고리즘문제풀이
    코딩테스트연습
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
개발하는 사막여우
[프로그래머스] 최솟값 만들기 / Python
상단으로

티스토리툴바