Codility_Triangle

functionMan·2024년 8월 18일

Codility

목록 보기
17/32

6-3. Triangle
An array A consisting of N integers is given. A triplet (P, Q, R) is triangular if 0 ≤ P < Q < R < N and:

A[P] + A[Q] > A[R],
A[Q] + A[R] > A[P],
A[R] + A[P] > A[Q].
For example, consider array A such that:

A[0] = 10 A[1] = 2 A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 20
Triplet (0, 2, 4) is triangular.

Write a function:

class Solution { public int solution(int[] A); }

that, given an array A consisting of N integers, returns 1 if there exists a triangular triplet for this array and returns 0 otherwise.

For example, given array A such that:

A[0] = 10 A[1] = 2 A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 20
the function should return 1, as explained above. Given array A such that:

A[0] = 10 A[1] = 50 A[2] = 5
A[3] = 1
the function should return 0.

Write an efficient algorithm for the following assumptions:

N is an integer within the range [0..100,000];
each element of array A is an integer within the range [−2,147,483,648..2,147,483,647].

배열 A가 N개의 정수로 구성되어 있습니다. 삼중항 (P, Q, R)은 다음 조건을 만족할 때 삼각형입니다:

0 ≤ P < Q < R < N 이고,

A[P] + A[Q] > A[R], A[Q] + A[R] > A[P], A[R] + A[P] > A[Q].

예를 들어, 배열 A가 다음과 같다고 가정합니다:

A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 20

삼중항 (0, 2, 4)는 삼각형입니다.

N개의 정수로 구성된 배열 A가 주어졌을 때, 삼각형 삼중항이 존재하면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

예를 들어, 배열 A가 다음과 같다고 가정합니다:

A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 20

이 함수는 위에서 설명한 대로 1을 반환해야 합니다. 배열 A가 다음과 같다고 가정합니다:

A[0] = 10 A[1] = 50 A[2] = 5 A[3] = 1

이 함수는 0을 반환해야 합니다.

다음 가정을 만족하는 효율적인 알고리즘을 작성하세요:

N은 [0…100,000] 범위 내의 정수입니다.
배열 A의 각 요소는 [−2,147,483,648…2,147,483,647] 범위 내의 정수입니다.

문제풀이

import java.util.*;

class Solution {
    public int solution(int[] A) {
        // 3이하인 경우 삼각형 존재 불가
        if (A.length < 3) {
            return 0;
        }

        // 배열을 오름차순으로 정렬
        Arrays.sort(A);

        for (int i = 0; i < A.length - 2; i++) {
            long P = A[i];
            long Q = A[i+1];
            long R = A[i+2];
            if (P > 0 && P + Q > R) {
                return 1;
            }
        }
        return 0;
    }
}

특이사항으로 계산시 int 범위를 넘어가는 경우가 있어 long 타입으로 변환해서 문제풀이를 하였습니다.

제출결과

문제풀어보기 -> https://app.codility.com/programmers/lessons/6-sorting/triangle/

profile
functionMan

0개의 댓글