Post

프로그래머스 LV2 "최솟값 만들기"

프로그래머스 Lv2 최솟값 만들기

기초부터 다시 공부를 하기위해 프로그래머스 라는 사이트에서 코딩테스트를 LV0 부터 가능한곳까지 못하는곳은 레퍼런스를 찾아가며 풀어보려고 합니다.

매일 1개의 풀이를 하고 그 풀이에대한 나의 생각 및 해석을 적어보려합니다.

오늘은 LV2 두번째 문제 ‘최솟값 만들기’ 문제입니다.

프로그래머스 이미지

위 이미지가 프로그래머스 코딩문제입니다.

문제는 매개변수로 여러개의 정수가 담겨있고 길이가 같은 배열의 형태의 AB를 입력받아, 두 배열에서 나올 수 있는 최소값을 출력하는 문제입니다.

프로그래머스의 설명을 보면 저는 이해가 가지 않았습니다. 제가 이해한 대로 문제를 다시 설명 드려보겠습니다.

  1. 매개변수로 들어오는 배열은 길이가 같습니다.

  2. 각 배열의 값을 1개씩만 골라서 곱해줍니다.

  3. 각 배열의 값을 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;
}

기본 세팅 코드는 매개변수 AB가 입력되고 함수 안에는 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;
}

위 코드의 간단한 설명을 알려드리겠습니다.

  1. AB 배열을 각각 정렬합니다. 이는 두 배열에서 크기가 큰 값과 작은 값을 대응시키기 위해 수행됩니다.

  2. answer 변수를 0으로 초기화합니다. 이 변수는 두 배열의 요소를 곱한 후 그 결과를 누적하여 저장합니다.

  3. 반복문을 사용하여 배열 A의 각 요소를 가져와서 해당 요소를 B 배열의 동일한 인덱스에 있는 요소와 곱한 후, 이 값을 answer에 더합니다.

  4. 최종적으로 answer 값을 반환합니다.

그럼 문제의 식이 완성되었으니 프로그래머스에 한번 확인해보겠습니다.

프로그래머스 이미지

성공이네요!

오늘은 프로그래머스 LV2 ‘최솟값 만들기’ 문제의 대해서 알아봤습니다.

제 방법이 꼭 정답은 아니니 그저 이런방법도 있구나하고 참고용으로만 봐주시면 감사하겠습니다.

감사합니다.

This post is licensed under CC BY 4.0 by the author.