[Codility] PermCheck JavaScript

Sohyeon Bak·2021년 11월 30일
0

Codility

목록 보기
6/19
post-thumbnail

문제

A non-empty array A consisting of N integers is given.

A permutation is a sequence containing each element from 1 to N once, and only once.

For example, array A such that:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2

is a permutation, but array A such that:

A[0] = 4
A[1] = 1
A[2] = 3

is not a permutation, because value 2 is missing.

The goal is to check whether array A is a permutation.

Write a function:

function solution(A);

that, given an array A, returns 1 if array A is a permutation and 0 if it is not.

For example, given array A such that:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2

the function should return 1.

Given array A such that:

A[0] = 4
A[1] = 1
A[2] = 3

the function should return 0.

Write an efficient algorithm for the following assumptions:

N is an integer within the range [1..100,000];
each element of array A is an integer within the range [1..1,000,000,000].

문제해석

문제는 1부터 N까지 연속된 수가 들어있는 배열이 주어지는데, 연속된 수가 아닌 배열이라면 0을 리턴하고 맞다면 1을 리턴하는 문제다.
배열의 길이가 1,000,000,000까지 해당됨으로 효율성 문제를 인식하지 않으면 오류가 뜰 가능성이 높다.

문제풀이

배열은 연속된 수가 들어있다고 했다. 1>2>3>...>N로 들어가 있다면 1을, 1>3>4>...>N 과 같은 배열로 들어 있다면 0을 리턴해야 한다.

  • 배열A를 sort()를 이용해 내림차순으로 정렬한다.
  • A의 인덱스 0이 1이 아니라면 첫번째 수부터 잘못된 것이기 때문에 0을 리턴한다.
  • for문을 통해 정렬된 배열A를 돌면서 i+1과 i의 차가 1이 아닐때 0을 리턴해준다.

    A[i+1] - A[i] !== 1

코드

function solution(A) {
    let answer = 1;
    A.sort((a,b)=>a-b);

    if(A[0] !== 1) return answer = 0

    for(let i = 0; i<A.length-1; i++){
        if(A[i+1]-A[i] !== 1) return answer = 0
    }

    return answer
}

최종결과

출처

https://app.codility.com/programmers/lessons/4-counting_elements/

profile
정리하고 기억하는 곳

0개의 댓글