[HackerRank] Permuting Two Arrays

아르당·2024년 5월 25일
0

HackerRank

목록 보기
94/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

n개의 요소를 가진 두 개의 배열 A와 B가 있다. 그것들을 각각 A'와 B'로 변경해라. A'[i] + B'[i]는 k보다 크거나 같고 i는 0보다 크거나 같고 n보다 작다.
A, B, k로 구성된 q개의 쿼리가 주어질 것이다. 만약 A'와 B'가 안전한 관계로 되어있다면 YES를 반환해라. 그렇지 않다면 NO를 반환해라.

Example

A = [0, 1]
B = [0, 2]
k = 1

A'와 B'의 값은 A' = [1, 0]과 B' = [0, 2]가 된다. YES를 반환한다.

Function Description

twoArrays 함수를 완성해라. 문자열 YES 또는 NO를 반환해야한다.
twoArrays 함수는 아래와 같은 매개변수를 가지고 있다.

  • int k: 정수
  • int A[n]: 정수형 배열
  • int B[n]: 정수형 배열

Returns

  • String: YES 또는 NO

Constraints

  • 1 <= q <= 10
  • 1 <= n <= 1000
  • 1 <= k <= 10^9
  • 0 <= A[i], B[i] <= 10^9

Solved

두 배열에 같은 인덱스의 값의 합이 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";

All Code

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";
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글