leetcode 1534

도토코·2025년 4월 14일

알고리즘 문제 풀이

목록 보기
38/44

문제

Given an array of integers arr, and three integers a, b and c. You need to find the number of good triplets.

A triplet (arr[i], arr[j], arr[k]) is good if the following conditions are true:

  • 0 <= i < j < k < arr.length
  • |arr[i] - arr[j]| <= a
  • |arr[j] - arr[k]| <= b
  • |arr[i] - arr[k]| <= c

Where |x| denotes the absolute value of x.

Return the number of good triplets.

번역

정수 배열 arr와 세 개의 정수 a, b, c가 주어졌을 때, 좋은 삼중쌍(triplet)의 개수를 구하세요.

삼중쌍 (arr[i], arr[j], arr[k])가 좋은 삼중쌍이 되기 위한 조건은 다음과 같습니다:

  • 0 <= i < j < k < arr.length
  • |arr[i] - arr[j]| <= a
  • |arr[j] - arr[k]| <= b
  • |arr[i] - arr[k]| <= c

여기서 |x|는 x의 절댓값을 의미합니다.

좋은 삼중쌍의 개수를 반환하세요.


예시

Example 1:

Input: arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
Output: 4
Explanation: There are 4 good triplets: [(3,0,1), (3,0,1), (3,1,1), (0,1,1)].

Example 2:

Input: arr = [1,1,2,2,3], a = 0, b = 0, c = 1
Output: 0
Explanation: No triplet satisfies all conditions.

제한사항

3 <= arr.length <= 100
0 <= arr[i] <= 1000
0 <= a, b, c <= 1000

예시 번역

예제 1:

입력: arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
출력: 4
설명: 좋은 삼중쌍은 다음 네 가지입니다: [(3,0,1), (3,0,1), (3,1,1), (0,1,1)]

예제 2:

입력: arr = [1,1,2,2,3], a = 0, b = 0, c = 1
출력: 0
설명: 조건을 모두 만족하는 삼중쌍이 없습니다.


class Solution:
    def countGoodTriplets(self, arr, a: int, b: int, c: int) -> int:
        cnt = 0
        long = len(arr)
        
        for i in range(long-2): 
            for j in range(i+1,long-1):
                if (abs(arr[i]-arr[j]) <= a): 첫번쩨 조건이 맞을 때만 다음으로 진행
                    for k in range(j+1,long):
                        if (abs(arr[j]-arr[k]) <= b and abs(arr[i]-arr[k]) <= c):
                            cnt +=1
        return cnt

문제를 보면 0 <= i < j < k < arr.length 이러한 부분이 있는 것을 알 수 있는데 이를 통해서 i는 j보다 -1만큼 반복 탐색을 하고 j는 k보다 -1 만큼 반복을 돌리고 k는 arr.length보다 -1적게 반복문을 돌리면 된다.

j까지 반복을 돌리고 나서 가장 처음의 조건인 |arr[i] - arr[j]| <= a를 찾는 조건을 집어넣어주고 이 조건이 맞다면 이제 k를 반복문을 통해 찾아주고 i와 j와 비교하는 조건을 건 후에 그 조건들이 전부 맞다면 카운트를 1올려주는 방법을 사용하면 된다.

profile
코(딩)(꿈)나무

0개의 댓글