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를 반환한다.