[프로그래머스]배열 비교하기

LSA·6일 전
0

javascript+a

목록 보기
6/8
post-thumbnail

문제 링크

문제 설명

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

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
    두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

입출력 예

arr1arr2result
[49, 13][70, 11, 2]-1
[100, 17, 84, 1][55, 12, 65, 36]1
[1, 2, 3, 4, 5][3, 3, 3, 3, 3]0

무슨 소리인가?

일단 매개변수로 배열 두개가 들어온다.
a. 두 배열의 길이(원소개수)가 다른가?

  • arr1이 많다면 1
  • arr2가 많다면 -1

b. 두 배열의 길이(원소개수)가 같은가?

  • arr1의 모든 숫자 합이 크면 1
  • arr2의 모든 숫자 합이 크면 -1
  • 두 배열의 숫자 합마저 같다면 0

결론: a분기 => b분기를 거쳐 조건에 따라 1,0,-1을 도출해야 하는 문제이다.

작성한 코드

function solution(arr1, arr2) {
  //두 수의 크기를 비교하는 함수
    const compareLength = (a,b) => a > b ? 1 : a < b ? -1 : 0;
  //두 배열의 총합을 비교하는 함수
    const compareSum = () => {
        const sumArr1 = arr1.reduce((acc,cur) => acc + cur,0);
        const sumArr2 = arr2.reduce((acc,cur) => acc + cur,0);
        return compareLength(sumArr1,sumArr2);
    }

    return compareLength(arr1.length,arr2.length) == 0 ? compareSum() : compareLength(arr1.length,arr2.length);
}

고민한 부분

최근에 재귀함수란 것을 새롭게 알게 되어서 어떤 문제를 볼때마다 어,이거 재귀함수로 만들어볼까?하는 뻘짓을 하게 되었다.
그런데 역시 익숙한 방식대로 임의의 함수를 돌리는게 더 이해가 빠르게 되는 것 같다.
처음에는 reduce 함수를 한개로 합칠수 있지 않을까..싶었는데 역시 무리일지도.
첫 번째 조건을 통과하는 시점을 어떻게 가를지 약간 고민한 편이다.

참고할 만한 코드

const solution = (arr1, arr2) => {
    return arr1.length !== arr2.length ? compare(arr1.length, arr2.length) : compare(arr1, arr2, "reduce");
};

const compare = (a, b, option) => {
    if (option === "reduce") {
        a = a.reduce((acc, cur) => acc + cur);
        b = b.reduce((acc, cur) => acc + cur);
    }
    return a > b ? 1 : a < b ? -1 : 0;
};

어떤 분은 이렇게 solution 함수 바깥에 파라미터를 한개 더 받는 함수를 작성하셔서, 깔끔하게 처리하셨다.
옵션 파라미터를 넣는 방법 괜찮은것 같다!

profile
진짜 간단하게 작성한 TIL 블로그

0개의 댓글

관련 채용 정보