프로그래머스 LV2 "최솟값 만들기"
프로그래머스 Lv2 최솟값 만들기
기초부터 다시 공부를 하기위해 프로그래머스 라는 사이트에서 코딩테스트를 LV0 부터 가능한곳까지 못하는곳은 레퍼런스를 찾아가며 풀어보려고 합니다.
매일 1개의 풀이를 하고 그 풀이에대한 나의 생각 및 해석을 적어보려합니다.
오늘은 LV2 두번째 문제 ‘최솟값 만들기’ 문제입니다.
위 이미지가 프로그래머스 코딩문제입니다.
문제는 매개변수로 여러개의 정수가 담겨있고 길이가 같은 배열의 형태의 A
와 B
를 입력받아, 두 배열에서 나올 수 있는 최소값을 출력하는 문제입니다.
프로그래머스의 설명을 보면 저는 이해가 가지 않았습니다. 제가 이해한 대로 문제를 다시 설명 드려보겠습니다.
매개변수로 들어오는 배열은 길이가 같습니다.
각 배열의 값을 1개씩만 골라서 곱해줍니다.
각 배열의 값을 1개씩만 골라서 곱한 값을 모두 합쳐 줍니다.
이런 과정을 실행해야하는 문제 입니다. 다만 조건은 1번 고른 배열의 값은 다시 쓸 수 없으며 2개의 배열에서 나올 수 있는 최소값을 구해야합니다.
예를 들어 A
배열은 [1,5]
, B
배열은 [2,5]
일때 최소값이 나오려면 1과 5를 곱하고 5와 2를 곱해야 최소값이 나올 수 있습니다.
이렇게 문제의 핵심을 알아 보았습니다.
그럼 오늘의 문제를 한번 풀어보겠습니다.
기본 세팅 코드도 알아보겠습니다.
1
2
3
4
5
6
7
function solution(A,B){
var answer = 0;
console.log('Hello Javascript')
return answer;
}
기본 세팅 코드는 매개변수 A
와 B
가 입력되고 함수 안에는 answer
이라는 변수가 선언되어 리턴하는 간단한 기본 세팅 코드입니다.
이번 문제에서 결국 해야하는 작업은 한 배열은 오름차순, 한 배열은 내림차순으로 변경해 곱하기 작업을 해야 최소값이 나올 수 있는것 입니다.
그럼 저희가 이번에 사용해야하는것은 sort()
메서드와 각 배열의 값에 대한 작업을 위해 반복문인 for()
문을 사용하도록 하겠습니다.
혹시 기억이 안나실 수 있으니 sort()
에 대해서 다시 한번 정리하고 문제의 답을 알아보겠습니다.
sort()
sort()
는 JavaScript 배열을 정렬하는 함수입니다. 숫자 배열의 경우 sort((a, b) => a - b)
와 같이 사용하여 오름차순으로 정렬할 수 있고, 문자열 배열의 경우는 그냥 sort()
를 호출하면 알파벳순으로 정렬됩니다.
- 예시 : 숫자 정렬(오름차순)
1 2 3
let test = [6,4,7,1,5,2]; test.sort((a,b) => a - b); // 결과 [1,2,4,5,6,7]
- 예시 : 숫자 정렬(내림차순)
1 2 3
let test = [6,4,7,1,5,2]; test.sort((a,b) => b - a); // 결과 [7,6,5,4,2,1]
이렇게 숫자의 경우 이런 형태의 정렬이 실행됩니다.
이번에는 문자열의 sort()
입니다.
- 예시 : 문자 정렬(오름차순)
1 2 3
let test = ['apple','car','ball']; test.sort(); // 결과 ['apple','ball','car']
- 예시 : 숫자 정렬(내림차순)
1 2 3
let test = ['apple','car','ball']; test.sort().reverse(); // 결과 ['car','ball','apple']
문자열의 경우 오름차순은 그냥 메서드를 호출하면 정렬이 됩니다. 반대로 내림차순의 경우에는
reverse()
메서드를 사용하지만 오늘은reverse()
메서드에 대해서는 설명하지 않고 다음에 다시 포스팅 하겠습니다.
이렇게 정렬하는 메서드인 sort()
를 복습해보았습니다.
그럼 코드의 결과를 한번 작성해 보겠습니다.
1
2
3
4
5
6
7
8
9
function solution(A,B){
var answer = 0;
var aArray = A.sort((a,b)=> a-b)
var bArray = B.sort((a,b)=> b-a)
for(i=0;i<aArray.length;i++){
answer += aArray[i] * bArray[i]
}
return answer;
}
위 코드의 간단한 설명을 알려드리겠습니다.
A
와B
배열을 각각 정렬합니다. 이는 두 배열에서 크기가 큰 값과 작은 값을 대응시키기 위해 수행됩니다.answer
변수를 0으로 초기화합니다. 이 변수는 두 배열의 요소를 곱한 후 그 결과를 누적하여 저장합니다.반복문을 사용하여 배열
A
의 각 요소를 가져와서 해당 요소를B
배열의 동일한 인덱스에 있는 요소와 곱한 후, 이 값을answer
에 더합니다.최종적으로
answer
값을 반환합니다.
그럼 문제의 식이 완성되었으니 프로그래머스에 한번 확인해보겠습니다.
성공이네요!
오늘은 프로그래머스 LV2 ‘최솟값 만들기’ 문제의 대해서 알아봤습니다.
제 방법이 꼭 정답은 아니니 그저 이런방법도 있구나하고 참고용으로만 봐주시면 감사하겠습니다.
감사합니다.