<Programmers> 배열의 길이에 따라 다른 연산

·2024년 7월 13일
0

프로그래머스

목록 보기
7/18
post-thumbnail

문제

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


문제 접근

  1. 배열의 길이가 긴 쪽이 더 크다.
  2. 배열의 길이가 같으면 배열 원소 합을 더하여 비교한다.
  3. 1번째 배열이 크면 1 반환, 2번째 배열이 크면 -1 반환, 서로 같으면 0 반환

문제 풀이

function solution(arr1, arr2) {
  if (arr1.length === arr2.length) {
    const sumArr1 = arr1.reduce((acc, cur) => acc + cur);
    const sumArr2 = arr2.reduce((acc, cur) => acc + cur);

    if (sumArr1 === sumArr2) {
      return 0;
    }

    return sumArr1 > sumArr2 ? 1 : -1;
  }

  if (arr1.length > arr2.length) {
    return 1;
  } else {
    return -1;
  }
}

console.log(solution([100, 17, 84, 1], [55, 12, 65, 36])); // 1
solution([49, 13], [70, 11, 2]); // -1
solution([1, 2, 3, 4, 5], [3, 3, 3, 3, 3]); // 0


문제풀이 회고

가독성이 좋은 코드로 해결해보고자 했다.

작성 후, GPT4o의 피드백을 받았는데, 썩 괜찮은 평가를 받았다.

Q. (...code) 내 코드는 전반적으로 좋은 코드에 속합니까?

A. 당신의 코드는 문제의 요구사항을 정확히 만족시키고 있으며, 이해하기 쉽고 가독성이 좋습니다.



+ 몇 가지 개선할 수 있는 부분을 제안하자면, 코드의 효율성과 안정성을 높이기 위해 약간의 최적화를 고려할 수 있습니다. 예를 들어, reduce 함수의 초기값을 명시적으로 지정하고, else를 생략해 가독성을 향상시키는 방법을 사용할 수 있습니다. 다음은 약간 수정된 버전입니다
function solution(arr1, arr2) {
  if (arr1.length === arr2.length) {
    const sumArr1 = arr1.reduce((acc, cur) => acc + cur, 0);
    const sumArr2 = arr2.reduce((acc, cur) => acc + cur, 0);

    if (sumArr1 === sumArr2) {
      return 0;
    }

    return sumArr1 > sumArr2 ? 1 : -1;
  }

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

// 예제 테스트
console.log(solution([49, 13], [70, 11, 2])); // -1
console.log(solution([1, 2, 3, 4, 5], [3, 3, 3, 3, 3])); // 0
console.log(solution([100, 17, 84, 1], [55, 12, 65, 36])); // 1

이 코드에서는 몇 가지 점이 개선되었습니다:

1. reduce 함수에 초기값 0을 명시적으로 설정하여 초기값 설정이 명확하게 되었습니다.
2. else를 사용하지 않음으로써 코드의 깊이를 줄이고 가독성을 높였습니다.

이러한 방식으로 코드를 작성하면 유지보수가 쉬워지고, 오류가 발생할 가능성이 줄어듭니다. 전반적으로, 당신의 원래 코드는 좋은 코드였으며, 이러한 작은 최적화를 통해 더 나은 코드를 작성할 수 있습니다.

정리

  1. else를 사용하지 않는 방향으로 작성하면 코드의 깊이를 줄이고 가독성을 높일 수 있다.
  2. 내가 알고있는 지식은 모두가 알고 있을 것이라 생각하지 말자. 생략할 수 있더라도, 초기값처럼 명시적으로 값을 설정할 수 있다면 설정하자.
profile
- 배움에는 끝이 없다.

0개의 댓글