
내가 생각했을때 문제에서 원하는부분
이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.
내가 이 문제를 보고 생각해본 부분
main 메서드에서 비교할 배열 쌍들을 각각 arr1List와 arr2List에 2차원 배열로 선언했다.
배열 쌍의 수만큼 반복문을 돌면서 각 쌍에 대해 compareArrays 메서드를 호출하여 결과를 구한다.
결과값은 콘솔에 출력한다.
compareArrays 메서드의 동작은 다음과 같다.
두 배열의 길이를 비교한다. 길이가 더 긴 배열이 크다고 판단하여, arr1이 더 길면 1을, arr2가 더 길면 -1을 반환한다.
배열 길이가 같으면 각 배열의 모든 원소 합을 구한다.
합을 비교하여 더 큰 쪽의 배열이 크다고 판단하여, arr1이 더 합이 크면 1을, arr2가 더 크면 -1을 반환한다.
길이도 같고 합도 같으면 두 배열은 같다는 의미로 0을 반환한다.
코드로 구현
class Solution {
public int solution(int[] arr1, int[] arr2) {
if (arr1.length > arr2.length) {
return 1;
} else if (arr1.length < arr2.length) {
return -1;
} else {
int sum1 = 0, sum2 = 0;
for (int num : arr1) sum1 += num;
for (int num : arr2) sum2 += num;
if (sum1 > sum2) {
return 1;
} else if (sum1 < sum2) {
return -1;
} else {
return 0;
}
}
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 배열 비교하기
public class Main89 {
public static void main(String[] args) {
int[][] arr1List = {
{49, 13},
{100, 17, 84, 1},
{1, 2, 3, 4, 5}
};
int[][] arr2List = {
{70, 11, 2},
{55, 12, 65, 36},
{3, 3, 3, 3, 3}
};
for (int i = 0; i < arr1List.length; i++) {
int result = compareArrays(arr1List[i], arr2List[i]);
System.out.println(result);
}
}
private static int compareArrays(int[] arr1, int[] arr2) {
if (arr1.length > arr2.length) {
return 1;
} else if (arr1.length < arr2.length) {
return -1;
} else {
int sum1 = 0, sum2 = 0;
for (int num : arr1) sum1 += num;
for (int num : arr2) sum2 += num;
if (sum1 > sum2) return 1;
else if (sum1 < sum2) return -1;
else return 0;
}
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.