반응형
문제
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가 주어지면 A의 각기 다른 3인덱스의 값이 다른 두 값의 합보다 작으면 삼각형으로 판단하여 1을 반환하고 없을 경우 0을 반환하는 문제이다.
풀이
1차 제출
// you can also use imports, for example:
import java.util.Arrays;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(int[] A) {
Arrays.sort(A);
for(int i=1; i<A.length-1; i++){
if( A[i-1] + A[i] > A[i+1] && A[i] + A[i+1] > A[i-1] && A[i+1] + A[i-1] > A[i]){
return 1;
}
}
return 0;
}
}
* 주의 사항
[2147483647, 2147483646, 2147483645] 인 배열로 테스트 했을 경우
삼각형을 구성할수 있어 값을 1을 반환하여야 하지만, P+Q > R 으로 비교하면 오버플로우가 발생하여 값이 틀립니다.
1문제 틀려 93점을 받았네요.
A[i-1] + A[i] > A[i+1] -> A[i-1] > A[i+1] - A[i] 로 변경하여 오버플로우를 피해봅시다.
// you can also use imports, for example:
import java.util.Arrays;
class Solution {
public int solution(int[] A) {
Arrays.sort(A);
for(int i=1; i<A.length-1; i++){
if( A[i-1] > A[i+1] - A[i] && A[i]> A[i-1] - A[i+1] && A[i+1] > A[i] - A[i-1] ){
return 1;
}
}
return 0;
}
}
삼각형을 이룰려면 크기가 비슷한 길이와 비교하도록 오름차순 정렬을 하여 해당 인덱스의 앞과 뒤의 값과 비교하여 삼각형을 구성할 수 있는지 확인합니다.
결과
주소 : app.codility.com/demo/results/training6WJJBM-GPG/
어렵진 않았지만, 오버플로우 때문에 2번 시도 했네요.
정렬이 들어가 있어 시간 복잡도는 N*log(N)이 나왔네요.
반응형
'DEV > 문제풀이' 카테고리의 다른 글
Lesson 4(Counting Elements) - MissingInteger (0) | 2021.01.14 |
---|---|
Lesson 4(Counting Elements) - MaxCounters (0) | 2021.01.11 |
Lesson 4(Counting Elements) - FrogRiverOne (0) | 2021.01.08 |
Lesson 3(Time Complexity) - TapeEquilibrium (0) | 2021.01.07 |
Lesson 3(Time Complexity) - PermMissingElem (방법2) (0) | 2021.01.05 |