- 최솟값 만들기 (그리디 알고리즘)2025년 02월 25일
- redpome
- 작성자
- 2025.02.25.:46
https://school.programmers.co.kr/learn/courses/30/lessons/12941
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
function solution(A,B){ let answer=0; const sortedA=A.sort((a,b)=>a-b); const sortedB=B.sort((a,b)=>b-a); for(let i=0;i<A.length;i++){ answer+=sortedA[i]*sortedB[i]; } return answer }
답은 매우 간단해 보이지만 왜 저렇게 정렬된 것끼리 곱한건지 생각해야한다, 곱한 값의 누적합을 최소로 만드는 문제이다. 이 문제를 풀기 위해 그리디 알고리즘을 쓴다. 그리디 알고리즘은 매 순간 당장 최선이라고 생각되는 선택을 해서 문제를 해결하는 방법이다.
그리디 알고리즘
그리디 알고리즘은 각 단계마다 가장 좋은 선택을 한다. 예를 들어, 우리가 어떤 선택을 할 때, 그 순간에 제일 좋아 보이는 (혹은 최소가 될 것 같은) 것을 고르는 것이다. 이 방법이 항상 전체 문제의 최적인 해를 보장하는 건 아니므로 상황에 따라 로직을 만들어야한다.
목표는 A와 B의 각 요소를 한 번씩만 사용해서, 각 쌍의 곱을 더한 값이 최소가 되게 하는 것이다.
큰 수끼리 곱하면 결과가 커지기 때문에, A 배열에서 작은 수와 B 배열에서 큰 수를 곱해야 한다, 그래서 각각 오름차수, 내림차순으로 정렬한 뒤 곱한 것이다.
단순하게 이 순간에 당장 좋아보이는 것을 선택하면 되는것이다.
Lv.2 문제는 이게 처음으로 접하는 건데 처음이라 초심자의 행운이 깃들었나보다
'프로그래머스' 카테고리의 다른 글
체육복 (0) 2025.03.11 카드 뭉치 (0) 2025.03.07 이상한 문자 만들기 (0) 2025.02.10 프로그래머스 - 과일 장수 (0) 2025.02.07 프로그래머스 - 소수 만들기 (2) 2025.01.14 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)