이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열arr1
과arr2
가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여arr1가 크다면 1
,arr2이 크다면 -1
,두 배열이 같다면 0
을 return 하는 solution 함수를 작성해 주세요.
- 배열의 길이가 긴 쪽이 더 크다.
- 배열의 길이가 같으면 배열 원소 합을 더하여 비교한다.
- 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
를 사용하지 않음으로써 코드의 깊이를 줄이고 가독성을 높였습니다.
이러한 방식으로 코드를 작성하면 유지보수가 쉬워지고, 오류가 발생할 가능성이 줄어듭니다. 전반적으로, 당신의 원래 코드는 좋은 코드였으며, 이러한 작은 최적화를 통해 더 나은 코드를 작성할 수 있습니다.
else
를 사용하지 않는 방향으로 작성하면 코드의 깊이를 줄이고 가독성을 높일 수 있다.