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

[CodeWars] javascript - 6kyu - IQ Test 문제풀이

by TLOWAC 2020. 4. 21.

Title

IQ Test

Description

Bob is preparing to pass IQ test.
The most frequent task in this test is to find out which one of the given numbers differs from the others.
Bob observed that one number usually differs from the others in evenness. Help Bob — to check his answers,
he needs a program that among the given numbers finds one that is different in evenness, and return a position of this number.

! Keep in mind that your task is to help Bob solve a real IQ test, which means indexes of the elements start from 1 (not 0)

 

Examples :

iqTest("2 4 7 8 10") => 3 // Third number is odd, while the rest of the numbers are even

iqTest("1 2 1 1") => 2 // Second number is even, while the rest of the numbers are odd

How Can I Solved

문제 요구사항 정의

숫자가 나열된 문자열이 주어진다.

해당 문자열 안의 숫자들을 비교한다.

짝수 값의 숫자가 많은 경우, 홀수 값의 위치를 반환한다.
홀수 값의 숫자가 많은 경우, 짝수 값의 위치를 반환한다.

단, 위치는 배열의 인덱스를 기준으로 +1 한 값이다.

문제 접근

숫자가 나열된 문자열을 function iqTest(numbres) { ... } 함수의 인자로 받는다.

인자로 받은 문자열을 공백 기준으로 구분하여, 배열에 담는다.

문자 배열을 정수형으로 형변환 한다.

정수형으로 형변환된 배열 중에서, 짝수 값인 원소들의 갯수를 구하여 변수에 담는다.

정수형으로 형변환된 배열 중에서, 홀수 값인 원소들의 갯수를 구하여 변수에 담는다.

2개의 변수 값을 비교한다.

짝수 값의 숫자가 많은 경우, 홀수 값의 위치를 반환한다.

홀수 값의 숫자가 많은 경우, 짝수 값의 위치를 반환한다.

initialValue

숫자가 나열된 문자열을 function iqTest(numbres) { ... } 함수의 인자로 받는다.

인자로 받은 문자열을 공백 기준으로 구분하여, 배열에 담는다.

문자 배열을 정수형으로 형변환 한다.

var initalValue = numbers.split(' ').map(val=>val*1)

evenCount

정수형으로 형변환된 배열(initialValue) 중에서, 짝수 값인 원소들의 갯수를 구하여 변수에 담는다.

var evenCount = initialValue.filter(val=> val%2===0).length

oddCount

정수형으로 형변환된 배열(initialValue) 중에서, 홀수 값인 원소들의 갯수를 구하여 변수에 담는다.

var oddCount = initialValue.filter(val=> val%2===1).length

Solution

function iqTest(numbers){
    var initialValue=numbers.split(' ').map(val=>val*1)

      //값 확인 코드
      console.log('입력값을 분리하고 배열에 담아 숫자로 변경 : ',numbers.split(' ').map(val=>val*1))
      console.log('입력값 중, 짝수값의 갯수 : ',numbers.split(' ').map(val=>val*1).filter(val=> val%2===0).length)

    //짝수값의 갯수
    var evenCount=initialValue.filter(val=> val%2===0).length

    //홀수값의 갯수
    var oddCount=initialValue.filter(val=> val%2===1).length

      //값 확인 코드
      console.log('evenCount(짝수) : ',evenCount)
      console.log('oddCount(홀수) : ',oddCount)


    return evenCount > oddCount ?
    initialValue.indexOf(initialValue.filter(_=>_%2===1)[0]) +1 :
    initialValue.indexOf(initialValue.filter(_=>_%2===0)[0]) +1
  }

Code Refactoring #1

function iqTest(numbers){
    var initialValue=numbers.split(' ').map(val=>val*1)
    //짝수값만 추출한 배열
    var evenCount=initialValue.filter(val=> val%2===0)

    //홀수값만 추출한 배열
    var oddCount=initialValue.filter(val=> val%2===1)


    return evenCount.length > oddCount.length ?
    initialValue.indexOf(oddCount[0]) +1 :
    initialValue.indexOf(evenCount[0]) +1
  }

댓글