문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
n개의 요소를 가진 두 개의 배열 A와 B가 있다. 그것들을 각각 A'와 B'로 변경해라. A'[i] + B'[i]는 k보다 크거나 같고 i는 0보다 크거나 같고 n보다 작다.
A, B, k로 구성된 q개의 쿼리가 주어질 것이다. 만약 A'와 B'가 안전한 관계로 되어있다면 YES를 반환해라. 그렇지 않다면 NO를 반환해라.
A = [0, 1]
B = [0, 2]
k = 1
A'와 B'의 값은 A' = [1, 0]과 B' = [0, 2]가 된다. YES를 반환한다.
twoArrays 함수를 완성해라. 문자열 YES 또는 NO를 반환해야한다.
twoArrays 함수는 아래와 같은 매개변수를 가지고 있다.
두 배열에 같은 인덱스의 값의 합이 k보다 크거나 같은지 확인하는 문제이다. 리스트 A를 오름차순, 리스트 B를 내림차순으로 정렬한 후에 각 요소의 합이 k보다 크거나 같은지 확인하면 문제를 쉽게 해결할 수 있다.
리스트 A는 오름차순, 리스트 B는 내림차순으로 정렬한다.
A.sort(Comparator.naturalOrder());
B.sort(Comparator.reverseOrder());
for문을 통해 A의 크기만큼 반복한다. 리스트 A와 B의 크기는 같아서 어떤 것을 기준으로해도 상관없다. 그리고 매 반복마다 해당 인덱스의 값들의 합이 K보다 크거나 같은지 확인한다. 만약 작다면 NO를 반환한다.
for(int i = 0; i < A.size(); i++){
if(A.get(i) + B.get(i) < k){
return "NO";
}
}
반복문이 끝날때까지 NO가 반환되지 않았다면 k보다 작은 합이 없기 때문에 마지막에 YES를 반환한다.
return "YES";
public static String twoArrays(int k, List<Integer> A, List<Integer> B) {
A.sort(Comparator.naturalOrder());
B.sort(Comparator.reverseOrder());
for(int i = 0; i < A.size(); i++){
if(A.get(i) + B.get(i) < k){
return "NO";
}
}
return "YES";
}