본문 바로가기

Coding Test/프로그래머스 기초

[Day 20] Java - 배열 비교하기

👽내 코드

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        if(arr1.length != arr2.length){
            if(arr1.length >arr2.length) return 1;
            else return -1;
        }else if(arr1.length == arr2.length){
            int num1 = 0;
            int num2 = 0;
            for(int i=0; i<arr1.length; i++){
                num1 += arr1[i];
            } 
             for(int j=0; j<arr2.length; j++){
                num2 += arr2[j];
            }
            if(num1>num2) return 1;
            else if (num1<num2) return -1;
            else return 0;
        }
        return 0;
    }
}

 

❓생각해 보아야 할 부분 

 

1)  모든 경우의 수에 return값을 썼어도 마지막에 써야하긴 함.

 

🦜 다른 코드

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);
    }
}

 

내가 어떤 부분을 줄이지 못했는지 파악할 수 있었다. 

먼저 굳이 if문으로 두 길이가 같지 않다는 조건을 설정하지 않고 바로 배열의 길이를 비교해 답을 return할 수 있었음

else if는 배열의 길이가 같은 경우이기 때문에 (처음에 반대로 생각해서 식을 반대로 썼는데 그 후 수정 제대로 못함)

for문을 괜히 두 번이나 돌렸다

 

마지막 삼항연산식을 활용하면 좋았을텐데....... 기억!

 

[문제출처: https://school.programmers.co.kr/learn/challenges?order=recent&levels=0]