Skip to main content

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;
        }
    }
}
  1. 배열 길이가 다른경우
    → 길이가 더 긴 배열이 더 크다
    • arr1.length > arr2.length1
    • arr1.length < arr2.length-1
  2. 배열 길이가 같고, 원소들의 합이 다른 경우
    → 합이 더 큰 배열이 더 크다
    • sum(arr1) > sum(arr2)1
    • sum(arr1) < sum(arr2)-1
  3. 배열 길이와 원소 합이 모두 같은 경우
    → 두 배열은 같다 → 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;
        }
    }
}

image.png

분기점이 많아서 그렇지 문제 조건대로 하나씩 적으면 어려울 건 없는 코드이다. 답안 제출 할 때 컴파일에러가 났는데 그 이유는 return이 모든 경우를 커버하지 못하기 때문이다. if-else 문에서 모든 경우를 처리했지만 자바 컴파일러는 else if 아래의 코드가 항상 실행된다는 걸 보장하지 않기 때문에, return이 없는 경우가 있다고 판단한다. 그냥 else ifelse 로 바꾸면 끝~!