프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 배열 비교하기(Java)

Sigfriede 2023. 5. 12. 01:10

  문제 설명

  이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

 

  제한사항

  • 1 <= arr1의 길이 <= 100
  • 1 <= arr2의 길이 <= 100
  • 1 <= arr1의 원소 <= 100
  • 1 <= arr2의 원소 <= 100

 

  입출력 예

arr1 arr2 result
[49, 13] [70, 11, 2] -1
[100, 17, 84, 1] [55, 12, 65, 36] 1
[1, 2, 3, 4, 5] [3, 3, 3, 3, 3] 0
class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        if (arr1.length > arr2.length) {
            answer = 1;
        } else if (arr1.length < arr2.length) {
            answer = -1;
        } else {
            int sum1 = 0;
            int sum2 = 0;
            for (int i = 0; i < arr1.length; i++) {
                sum1 += arr1[i];
                sum2 += arr2[i];
                if (sum1 > sum2) {
                    answer = 1;
                } else if (sum1 < sum2) {
                    answer = -1;
                } else {
                    answer = 0;
                }
            }
        }
        return answer;
    }
}

  코드가 구분없이 연속적으로 적힌 탓에 가독성이 안 좋을 수 있습니다. 그러나 선형적이고 직관적으로 작성하여 구조는 단순합니다.

  첫 if문에서는 배열 간의 길이를 비교합니다. 만약 arr1의 길이가 arr2의 길이보다 크다면 answer에 1을, arr1의 길이가 arr2의 길이보다 작다면 answer에 -1을 할당합니다. 앞선 두 조건에 걸리지 않았다면 두 배열의 길이가 같다는 것입니다.

  각 배열의 합을 담을 변수 sum1과 sum2를 생성합니다. 각각의 변수에 arr1의 i번째 원소를, arr2의 i번째 원소를 더하기 할당하여 각각의 값을 구합니다. 길이가 동일하므로 같은 변수 i로 계산할 수 있습니다.

  두 번째 if문에서는 동일한 길이의 배열 간, 원소의 합을 비교하여 할당될 값을 구분합니다. 만약 arr1의 원소의 합(sum1)이 arr2(sum2)의 원소의 합보다 크다면 answer에 1을, arr1의 원소의 합이 arr2의 원소의 합보다 작다면 answer에 -1을 할당합니다. 앞선 두 조건에 걸리지 않았다면 두 배열의 원소의 합 역시 같다는 뜻이므로 answer에 0을 할당합니다.