배열 비교하기

nacSeo (낙서)·2024년 3월 1일
0

프로그래머스

목록 보기
110/169

문제 설명

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

두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 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의 길이가 같을 때 합을 비교하면서 반복문을 돌릴 때, 어차피 둘의 길이가 같으므로 한 번의 반복문으로 처리가 가능

느낀 점

어려운 문제라기 보다 노가다성에 가까운 귀찮은 문제라고 생각했는데, 다른 사람들 코드를 보니 단순화시킬 수 있는 여러 방법들이 있었다. 나는 가독성을 생각하여 문제 조건에 맞춰 코드를 하나하나 짰는데, 성능을 생각하면 좀 더 단순화시킬 필요성이 있겠다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글