JavaScript/알고리즘

프로그래머스 배열 비교하기 JS ( if문,reduce() )

hihiha2 2023. 6. 15. 16:52
반응형

문제 설명

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

 

 

 

✅ 내 코드

function solution(arr1, arr2) {
    const arr1Sum = arr1.reduce((acc, cur) => acc + cur, 0);
    const arr2Sum = arr2.reduce((acc, cur) => acc + cur, 0);

    if (arr1.length === arr2.length) {
        if (arr1Sum > arr2Sum) {
            return 1;
        } else if (arr2Sum > arr1Sum) {
            return -1;
        } else {
            return 0;
        }
    }

    return arr1.length > arr2.length ? 1 : -1;
}

두 배열의 길이로 대소관계를 비교해서 1과 -1을 리턴하는건 더 단순한데, 

길이가 같을경우에는 각각의 합의 대소를 비교해야하고 더 디테일한 조건을 세워야하기 때문에 제일먼저 두 수가 같을 경우부터 비교해야겠다고 생각했다.

 

두 배열의 길이가 같을 경우에는 합의 대소를 비교해야하므로, 각각의 합을 구해야하는데 나는 reduce를 이용해서 합을 구했다.

reduce를 사용한 식을 조건문안에 직접 적는것은 코드의 가독성이 떨어지므로 arr1Sum, arr2Sum과 같이 변수에 담아서 if문에 넣었다.

 

그리고 if문으로 두 배열의 길이가 같은데 1️⃣ arr1이 큰경우 2️⃣arr2가 큰경우 3️⃣arr1과 arr2가 같은경우로 조건을 나누었다.

 

그리고 두 배열의 어느한쪽이 큰 경우는 삼항연산자를 통해서 1과 -1이 리턴되도록해주었다.

 

 

🙋‍♀️ 내 생각

if문과 reduce()만 사용할 줄 알면 풀 수 있는 어렵지 않은 문제였다.

어렵지 않은 문제지만 그래도 생각한 바를 바로 자바스크립트라는 언어로 적을 수 있다는데에서 보람을 느꼈다.

그래도 나름대로 꾸준하게 문제를 풀고 있는데 점점 키보드로 치면서 내 생각을 JS로 옮기는데 익숙해지고 있는것같다.

아직 갈길이 멀긴하지만 이렇게 꾸준히 하다보면 더 어려운 코드도 정말로 언어를 하는것처럼 적을 수 있지 않을까 생각이 들었다.

아직 알고리즘의 속도나 효율성은 고려하면서 짜고 있지 않은데 나중에는 그런것도 고려하고, 더 가독성이 좋은 코드, 읽기 쉬운코드를 짤수있도로 하고 싶다.

 

반응형