[HackerRank] Beautiful Triplets

아르당·2023년 11월 28일
0

HackerRank

목록 보기
35/109
post-thumbnail

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

문제

정수형 배열 a가 주어질 때, 아래 조건이 맞다면 세 쌍의 정수(a[i], a[j], a[k])는 아름다운 쌍이다.

  • i < j < k
  • a[j] - a[i] = a[k] - a[j] = d

요소가 증가하는 정수형 배열과 d의 값이 주어 졌을 때, 배열에서 아름다운 쌍의 개수를 구해라.

Example

arr = [2, 2, 3, 4, 5]
d = 1

[i, j, k] = [0, 2, 3], [1, 2, 3], [2, 3, 4]의 인덱스인 세 개의 아름다운 쌍이 있다. 첫 번째 쌍으로 테스트하면 arr[j] - arr[i] = 3 - 2 = 1과 arr[k] - arr[j] = 4 - 3 = 1이 된다.

Function Description

beautifulTriplets 함수를 완성해라.
beautifulTriplets 함수는 아래와 같은 매개변수를 가지고 있다.

  • int d: 일치하는 값
  • int arr[n]: 오름차순으로 정렬된 정수

Return

  • int: 아름다운 쌍의 개수

Constraints

  • 1 <= n <= 10^4
  • 1 <= d <= 20
  • 0 <= arr[i] <= 2 * 10^4
  • arr[i] > arr[i - 1]

풀이

연속된 세 정수의 쌍이 아니라 순서만 맞는 세 정수의 쌍을 찾으면 된다. 3번의 반복문을 사용하고 마지막 반복문은 조건에 맞으면 실행한다. 아주 비효율적인 방법의 풀이다.
먼저 아름다운 쌍의 수를 담을 count 변수를 선언하고 0을 할당한다.

int count = 0;

그리고 i에 대한 반복문, j에 대한 반복문 그리고 k에 대한 반복문은 arr[j] - arr[i] == d이면 실행해준다. arr[k] - arr[j] == d이면 count를 증가시킨다.

for(int i = 0; i < arr.size() - 2; i++){
	for(int j = i + 1; j < arr.size() - 1; j++){
		if(arr.get(j) - arr.get(i) == d){
			for(int k = j + 1; k < arr.size(); k++){
				if(arr.get(k) - arr.get(j) == d){
					count++;
				}
			}
		}
	}
}

마지막으로 count를 반환한다.

return count;

전체 코드

public static int beautifulTriplets(int d, List<Integer> arr) {
	int count = 0;

	for(int i = 0; i < arr.size() - 2; i++){
		for(int j = i + 1; j < arr.size() - 1; j++){
			if(arr.get(j) - arr.get(i) == d){
				for(int k = j + 1; k < arr.size(); k++){
					if(arr.get(k) - arr.get(j) == d){
						count++;
					}
				}
			}
		}
	}

	return count;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글