본문 바로가기
알고리즘/Codewars

[Codewars] Find The Parity Outlier (6 kyu) / JavaScript

by fluss 2022. 11. 15.

https://www.codewars.com/kata/5526fc09a1bbd946250002dc

 

Codewars - Achieve mastery through coding practice and developer mentorship

A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!

www.codewars.com

 

DESCRIPTION:

You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N. Write a method that takes the array as an argument and returns this "outlier" N.

 

Examples

[2, 4, 0, 100, 4, 11, 2602, 36]
Should return: 11 (the only odd number)

[160, 3, 1719, 19, 11, 13, -21]
Should return: 160 (the only even number)

 

설명:

정수를 포함하는 배열(길이가 최소 3이지만 매우 클 수도 있음)을 받습니다. 배열은 하나의 정수 N을 제외한 나머지가 전부 홀수로 구성되거나 전부 짝수로 구성됩니다. 배열을 인수로 받아 "이상 값"N을 반환하는 메서드를 작성하세요.

 

예시

[2, 4, 0, 100, 4, 11, 2602, 36]
Should return: 11 (the only odd number)

[160, 3, 1719, 19, 11, 13, -21]
Should return: 160 (the only even number)

 

풀이

반복문으로 배열에 홀수인 요소와 짝수인 요소의 개수를 각각 세고 만약 홀수라면 1을 짝수라면 0을 배열에 따로 넣어주었다. 1번만 세어진 경우 그 수가 이상 값이므로 만약 그 수가 짝수라면 0, 홀수라면 1의 위치를 배열에서 찾고 그 위치에 있는 주어진 배열의 요소를 반환했다.

 

코드

function findOutlier(integers){
  let check = [];
  let evenCount = 0;
  let oddCount = 0;
  let checkNum = 0;
  for(let i = 0; i < integers.length; i++){
    if(integers[i] % 2 == 0){
      check.push(0);
      evenCount += 1;
    }
    else{
      check.push(1);
      oddCount += 1;
    }
  }
  
  if(oddCount === 1){
    checkNum = 1
  }
  let idx = check.indexOf(checkNum);
  return integers[idx];
}

 

다른 사람의 좋았던 풀이

function findOutlier(int){
  var even = int.filter(a=>a%2==0);
  var odd = int.filter(a=>a%2!==0);
  return even.length==1? even[0] : odd[0];
}

댓글