N개의 정수로 구성된 비어 있지 않은 배열 A가 제공됩니다.
순열 은 1에서 N까지의 각 요소를 한 번만 포함하는 시퀀스입니다.
예를 들어 배열 A는 다음과 같습니다.
A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
순열이지만 배열 A는 다음과 같습니다.
A[0] = 4
A[1] = 1
A[2] = 3
값 2가 없기 때문에 순열이 아닙니다.
목표는 배열 A가 순열인지 확인하는 것입니다.
함수 작성:
기능 솔루션(A);
배열 A가 주어지면 배열 A가 순열이면 1을 반환하고 그렇지 않으면 0을 반환합니다.
예를 들어 다음과 같은 배열 A가 있다고 가정합니다.
A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
함수는 1을 반환해야 합니다.
주어진 배열 A는 다음과 같습니다.
A[0] = 4
A[1] = 1
A[2] = 3
함수는 0을 반환해야 합니다.
다음 가정에 대한 효율적인 알고리즘을 작성하십시오 .
N은 범위 [ 1 .. 100,000 ] 내의 정수이고;
배열 A의 각 요소는 [ 1 .. 1,000,000,000 ] 범위 내의 정수입니다 .
처음엔 단순하게 생각해서 배열의 최댓값 (끝값)이 길이와 같다면 1을 리턴 해주고
Set에 넣고 그 길이가 A의 길이와 같지 않다면 0을 리턴해주었는데
이 부분에서 자꾸 에러가 나왔다.. 그래서 이유를 살펴보니 총합은 같지만 순열이 아닐 때가 문제였다. (차이가 1씩이 아닌데 총합은 같은 경우)
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// Implement your solution here
if (Math.max(...A) === A.length) {
return 1
} else if (new Set(A).size !== A.length) {
return 0
}
return 0
}
83%
function solution(A) {
A.sort((l, r) => l - r);
if (A[0] !== 1) {
return 0;
}
for (let i = 0; i < A.length - 1; i++) {
if (A[i + 1] - A[i] !== 1) {
return 0;
}
}
return 1;
}
오름차순으로 정렬을 한 후에 첫번째 인자가 1이 아니라면 0을 리턴하고
배열인덱스 간의 차이가 1이 아닐때도 0을 리턴하고
그 밖에 경우에만 1을 리턴한다.