문제 설명
이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ arr1의 길이 ≤ 100 1 ≤ arr2의 길이 ≤ 100 1 ≤ arr1의 원소 ≤ 100 1 ≤ arr2의 원소 ≤ 100 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 배열의 대소관계와 다를 수 있는 점에 유의해주세요.
나의 코드
class Solution {
public int solution(int[] arr1, int[] arr2) {
int answer = 0;
if(arr1.length!=arr2.length) {
if(arr1.length>arr2.length) {
answer = 1;
} else if(arr1.length<arr2.length) {
answer = -1;
}
} else if(arr1.length == arr2.length) {
int sum1 = 0;
int sum2 = 0;
for(int num1 : arr1) {
sum1 += num1;
}
for(int num2 : arr2) {
sum2 += num2;
}
if(sum1>sum2) {
answer = 1;
} else if(sum1<sum2) {
answer = -1;
} else answer = 0;
}
return answer;
}
}
다른 사람 코드
import java.util.stream.IntStream;
class Solution {
public int solution(int[] arr1, int[] arr2) {
int answer = Integer.compare(arr1.length, arr2.length);
if(answer == 0) {
answer = Integer.compare(IntStream.of(arr1).sum(), IntStream.of(arr2).sum());
}
return answer;
}
}
Integer.compare()
함수와 IntStream.of()
를 이용한 방법
class Solution {
public int solution(int[] arr1, int[] arr2) {
if (arr1.length < arr2.length) return -1;
else if (arr1.length > arr2.length) return 1;
int arr1Sum = 0, arr2Sum = 0;
for (int i = 0;i < arr1.length;i++) {
arr1Sum += arr1[i];
arr2Sum += arr2[i];
}
return arr1Sum == arr2Sum ? 0 : (arr1Sum > arr2Sum ? 1 : -1);
}
}
arr1
의 길이와 arr2
의 길이가 같을 때 합을 비교하면서 반복문을 돌릴 때, 어차피 둘의 길이가 같으므로 한 번의 반복문으로 처리가 가능
느낀 점
어려운 문제라기 보다 노가다성에 가까운 귀찮은 문제라고 생각했는데, 다른 사람들 코드를 보니 단순화시킬 수 있는 여러 방법들이 있었다. 나는 가독성을 생각하여 문제 조건에 맞춰 코드를 하나하나 짰는데, 성능을 생각하면 좀 더 단순화시킬 필요성이 있겠다.