Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 엘리스
- 엘리스 ai 트랙
- 코딩부트캠프
- 자바스크립트 날씨 웹 만들기
- 프론트개발
- 개발공부
- 개발일기
- 자바스크립트 split()
- [AI 5기] 연습 문제집
- [파이썬 실습] 중급 문제
- 삼항연산자
- 코드스테이츠
- 리트코드
- 자바스크립트
- 자바스크립트 날씨
- RN 프로젝트
- 간단한 날씨 웹 만들기
- [파이썬 실습] 기초 문제
- JavaScript
- [파이썬 실습] 심화 문제
- 프로그래머스
- 부트캠프
- 엘리스 AI 트랙 5기
- reactnativecli
- 자바스크립트 sort()
- 날씨 웹 만들기
- 자바스크립트 reduce()
- 프론트개발공부
- leetcode
- HTML
Archives
- Today
- Total
개발조각
[프로그래머스] 최솟값 만들기 본문
728x90
반응형
이번 문제는 레벨 1 수준의 문제였습니다.
요즘 reduce를 안 써서 사용법을 잊고 있었는데 이번 기회에 다시 알게 되는 문제였던 것 같습니다.


최솟값을 만들기 위해서는 "큰수 * 작은 수"를 하면 작은 수가 나옵니다.
그래서 배열A는 오름차순으로 배열B는 내림차순으로 정렬한 뒤 각 배열의 index가 같은 원소끼리 곱해주고 더해주면 됩니다.
해결방안
function solution(A,B){
let numA = A.sort((a,b)=> a-b);
let numB = B.sort((a,b)=> b-a);
// 버전 1
var answer = 0;
for(let i=0; i<A.length; i++) answer += numA[i]*numB[i];
return answer;
// 버전 2
return numA.reduce((acc, cur, idx)=> acc + cur*numB[idx],0);
}
해결방안 순서
- 배열A는 오름차순, 배열B는 내림차순으로 정렬해주기
- 배열 A, B에서 index가 같은 원소끼리 곱해주고 더해준 값을 return 하기
1단계. 배열A는 오름차순, 배열B는 내림차순으로 정렬해주기
let numA = A.sort((a,b)=> a-b);
let numB = B.sort((a,b)=> b-a);
정렬은 정렬 메서드인 sort()를 사용해주었습니다.
- 오름차순 : Array.sort((a,b)=>a-b);
- 내림차순 : Array.sort((a,b)=>b-a);
여기서 오름차순을 sort(); 이렇게만 쓰면 "제출 후 채점하기"에서 통과를 못합니다.
2단계. 배열 A, B에서 index가 같은 원소끼리 곱해주고 더해준 값을 return 하기
// 버전 1
var answer = 0;
for(let i=0; i<A.length; i++) answer += numA[i]*numB[i];
return answer;
// 버전 2
return numA.reduce((acc, cur, idx)=> acc + cur*numB[idx],0);
여기서는 버전을 2가지를 소개하겠습니다.
버전 1은 정직하게 for문을 사용해서 푼 방식이고요.
버전 2는 reduce() 메서드를 사용해서 푼 방식입니다.
버전 1은 보시면 다들 아실 것 같아서 버전 2만 설명하겠습니다.
reduce()에는 네 개의 인자를 가집니다.
- 누산기 (acc)
- 현재 값 (cur)
- 현재 인덱스 (idx)
- 원본 배열 (src)
이번 문제에서는 누산기(acc), 현재 값(cur), 현재 인덱스(idx) 3가지를 사용했습니다.
acc + cur*numB[idx] -> 누적된 값 + numA[현재 인덱스]*numB[현재 인덱스]
이렇게 됩니다.
여기서 포인트는 초기값을 꼭 설정해주어야 됩니다.
- numA.reduce((acc, cur, idx)=> acc + cur*numB[idx],0); -> 여기서 0이 초기값입니다.
초기값 설정 안 해주면 답이 이상하게 나옵니다.
프로그래머스 최솟값 만들기 해결방안 설명은 여기까지입니다.
728x90
반응형
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 짝지어 제거하기 (0) | 2022.04.18 |
|---|---|
| [프로그래머스] [3차] n진수 게임 (0) | 2022.04.17 |
| [프로그래머스] 구명보트 (0) | 2022.04.15 |
| [프로그래머스]튜플 (0) | 2022.04.14 |
| [프로그래머스] JadenCase 문자열 만들기 (0) | 2022.04.12 |
Comments