문제 설명
이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
- 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
- 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 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을 할당합니다.
'프로그래머스 > Lv. 0(코딩 기초 트레이닝)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 꼬리 문자열(Java) (0) | 2023.05.13 |
---|---|
[프로그래머스 코딩테스트] 문자열 묶기(Java) (0) | 2023.05.12 |
[프로그래머스 코딩테스트] 배열의 원소 삭제하기(Java) (0) | 2023.05.12 |
[프로그래머스 코딩테스트] 0 떼기(Java) (0) | 2023.05.11 |
[프로그래머스 코딩테스트] 배열의 길이에 따른 연산하기(Java) (0) | 2023.05.11 |