55. [Java] 배열 비교하기
https://school.programmers.co.kr/learn/courses/30/lessons/181854
- 이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의한다.
- 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 크다.
- 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같다.
- 두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여
→ arr2가 크다면 -1
→ arr1이 크다면 1
→ 두 배열이 같다면 0을 return
- 1 ≤ arr1의 길이 ≤ 100
- 1 ≤ arr2의 길이 ≤ 100
- 1 ≤ arr1의 원소 ≤ 100
- 1 ≤ arr2의 원소 ≤ 100
- 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 배열의 대소관계와 다를 수 있는 점에 유의하라.
정답코드
class Solution {
public int solution(int[] arr1, int[] arr2) {
int len1 = arr1.length;
int len2 = arr2.length;
if (len1 != len2) {
return (len1 > len2) ? 1 : -1;
} else {
int sum1 = 0;
int sum2 = 0;
for (int num1 : arr1) {
sum1 += num1;
}
for (int num2 : arr2) {
sum2 += num2;
}
if (sum1 == sum2) {
return 0;
}
return (sum1 > sum2) ? 1 : -1;
}
}
}
- 배열 길이가 다른경우
→ 길이가 더 긴 배열이 더 크다arr1.length > arr2.length
→1
arr1.length < arr2.length
→-1
- 배열 길이가 같고, 원소들의 합이 다른 경우
→ 합이 더 큰 배열이 더 크다sum(arr1) > sum(arr2)
→1
sum(arr1) < sum(arr2)
→-1
- 배열 길이와 원소 합이 모두 같은 경우
→ 두 배열은 같다 →0
오답
class Solution {
public int solution(int[] arr1, int[] arr2) {
int len1 = arr1.length;
int len2 = arr2.length;
if (len1 != len2) {
return (len1 > len2) ? 1 : -1;
} else if (len1 == len2) {
int sum1 = 0;
int sum2 = 0;
for (int num1 : arr1) {
sum1 += num1;
}
for (int num2 : arr2) {
sum2 += num2;
}
if (sum1 == sum2) {
return 0;
}
return (sum1 > sum2) ? 1 : -1;
}
}
}
분기점이 많아서 그렇지 문제 조건대로 하나씩 적으면 어려울 건 없는 코드이다. 답안 제출 할 때 컴파일에러가 났는데 그 이유는 return
이 모든 경우를 커버하지 못하기 때문이다. if-else
문에서 모든 경우를 처리했지만 자바 컴파일러는 else if
아래의 코드가 항상 실행된다는 걸 보장하지 않기 때문에, return
이 없는 경우가 있다고 판단한다. 그냥 else if
를 else
로 바꾸면 끝~!