티스토리 뷰

Codility

Codility - PermCheck 풀이

Pewww 2019. 6. 23. 23:54

Lesson4. PermCheck

안녕하세요!

역시 오랜만에 돌아왔습니다.. (회사 일이 바쁘다는 핑계를 좀..)

이번에는 Lesson4의 첫 번째 문제인 PermCheck를 풀이해보려 합니다.

Question

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

 

PermCheck coding task - Learn to Code - Codility

 

app.codility.com

N개의 정수로 구성된 비어 있지 않은 배열 A가 주어지는데, 질문 그대로 배열 A가 수열인지 아닌지 판별하여 맞으면 1을, 아니면 0을 반환해주면 됩니다. (배열 안의 수는 1부터 N까지 있어야 합니다.)

 

즉, 주어진 배열 A가 [1, 4, 2, 3] 라고 했을 때, A 내부의 요소는 1 부터 N(= 4) 까지 모두 들어있으므로 1을 반환,

A가 [1, 4, 2] 라고 했을 때, A 내부 요소는 1부터 N(= 3)까지 들어있지 않으므로 0을 반환하면 됩니다.

Answer

 

객체를 이용해 풀이해봤습니다.

 

1. 일단 A 배열의 요소들을 numObj라는 객체에 키, 값으로 저장시켜줍니다.

2. 1부터 N까지 루프를 돌며(idx++), numObj[idx]가 undefined이면 0을 반환시켜줍니다.

3. 루프를 모두 돌고 난 후에도 함수가 종료되지 않은 경우에는, 주어진 배열 A가 수열이라는 뜻이 되므로 최종적으로 1을 반환해줍니다. 

 

풀이 코드는 아래와 같습니다. ( 시간 복잡도는 O(N) 혹은 O(N * log(N)) )

function solution(A) {
  const numObj = {};
    
  for (let val of A) {
    numObj[val] = val;
  }
    
  for (let idx = 1, arrLeng = A.length; idx <= arrLeng; idx++) {
    if (numObj[idx] === undefined) {
      return 0;
    }
  }
    
  return 1;
}

 

풀이 결과

The End

생각보다 간단해 쉽게 풀었던 것 같습니다.

다음 시간에는 Lesson4. FrogRiverOne 문제를 풀어보려 합니다.

Codility 말고도 다른 프론트엔드나 개발 관련 포스팅도 자주 해보려 합니다.

봐주셔서 감사합니다!

'Codility' 카테고리의 다른 글

Codility - FrogRiverOne 풀이  (0) 2019.10.22
Codility - TapeEquilibrium 풀이  (0) 2019.05.14
Codility - PermMissingElem 풀이  (0) 2019.04.30
Codility - FrogJmp 풀이  (0) 2019.04.25
Codility - OddOccurrencesInArray 풀이  (0) 2019.04.23
댓글