checkThreeAndTwo.js (7kyu 88)

Codewars 알고리즘 풀이


Problem

  • Given an array with exactly 5 strings ‘a’, ‘b’ or ‘c’, check if the array contains three and two of the same values.
    • 정확히 5개의 문자열 ‘a’, ‘b’ 또는 ‘c’가 있는 배열이 주어진다.
    • 배열에 동일한 값 3개와 2개가 포함되어 있는지 확인한다.


Solution 01

function checkThreeAndTwo(arr) {
  let countA = 0;
  let countB = 0;
  let countC = 0;
  
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === 'a') countA++;
    if (arr[i] === 'b') countB++;
    if (arr[i] === 'c') countC++;
  }
  
  return (countA === 3 || countB === 3 || countC === 3) && (countA === 2 || countB === 2 || countC === 2);
}

checkThreeAndTwo([]);  // false
checkThreeAndTwo([]);  // true
checkThreeAndTwo([]);  // true
checkThreeAndTwo([]);  // false


Solution 02

function checkThreeAndTwo(arr) {
  let countA = arr.filter(i => i === 'a').length;
  let countB = arr.filter(i => i === 'b').length;
  let countC = arr.filter(i => i === 'c').length;
  
  return (countA === 3 || countB === 3 || countC === 3) && (countA === 2 || countB === 2 || countC === 2);
}

checkThreeAndTwo([]);  // false
checkThreeAndTwo([]);  // true
checkThreeAndTwo([]);  // true
checkThreeAndTwo([]);  // false

filter(): 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.


Solution 03

function checkThreeAndTwo(arr) {
  let result = [(a = 0), (b = 0), (c = 0)];
  
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === 'a') result[0]++;
    if (arr[i] === 'b') result[1]++;
    if (arr[i] === 'c') result[2]++;
  }
  
  return result.includes(3) && result.includes(2);
}

checkThreeAndTwo([]);  // false
checkThreeAndTwo([]);  // true
checkThreeAndTwo([]);  // true
checkThreeAndTwo([]);  // false

includes(): 특정 값이 있는지 확인하고, true/false를 반환한다.