처음에 indexOf를 map 안에서 사용하다가 자꾸 오류가 발생해서 과정을 분리해서 풀어주었다.
1. 일치하는 것들을 1, 일치하지 않는 것들을 -1로 바꿈.
2. 일치하는 것의 위치를 찾아냄.
function solution(num, k) {
let arr = num.toString().split('').map(n => Number(n) === k ? 1 : -1);
return arr.includes(1) ? arr.indexOf(1)+1 : -1;
}
다른 풀이를 참고해보니 indexOf를 map 안에서 사용하는 것이 아니라 뒤에 사용해주면 간단하게 풀리는 것이었다. 판별도 삼항연산자가 아니라 or를 이용하면 간단하게 해결된다.
function solution(num, k) {
return num.toString().split("").map((el) => Number(el)).indexOf(k) + 1 || -1
}
filter를 이용해 나누어 떨어지는 것들만 골라낸다.
function solution(n, numlist) {
return numlist.filter(x => x % n === 0);
}
숫자를 문자열로 바꾼 후 배열에 쪼개 담아서 reduce를 이용해 다 더해준다.
(문자열인 상태로 더하면 안되므로 다시 숫자로 바꾸며 더해주어야 함)
배열에 쪼개 담는 방법은 아래처럼 spread operator를 이용해도 되고 split을 이용해도 된다.
function solution(n) {
return [...n.toString()].reduce((a,b) => Number(a)+Number(b), 0);
}
반복문 안에 조건문을 넣어 계산해주었다.
변수는 2개를 만들었는데 두 가지 목적에 맞게 만들었다.
1. 연산자 식별을 위해 문자로 쪼갠 배열 (str)
2. 연산을 위해 숫자로 바꾼 배열 (num)
⭐️ 여기서 식이 공백을 기준으로 분리되어 있기 때문에 반드시
split(' ')
해주어야 한다.
split('')
하면 두 자리 숫자가 이상하게 쪼개진다.
ex) 11이 1,1로 분리됨.
연산자가 +인 경우와 -인 경우로 나누어 연산을 하고, 삼항연산자를 통해 수식 결과를 판별했다.
function solution(quiz) {
for(let i=0;i<quiz.length;i++){
let str = quiz[i].split(' ');
let num = quiz[i].split(' ').map(n => Number(n));
if(str[1] == "+"){
num[0] + num[2] === num[4] ? quiz[i] = "O" : quiz[i] = "X"
} else if(str[1] == "-"){
num[0] - num[2] === num[4] ? quiz[i] = "O" : quiz[i] = "X"
}
}
return quiz;
}
참고) 저번에 배운 eval()
을 이용해서 푼다면 이렇게 풀 수도 있다.
⭐️ 포인트 : 좌변과 우변을 분리할 때 등호를 기준으로 split 하기.
eval()
은 권장되는 방식이 아니므로 사용에 유의하기!
function solution(quiz) {
return quiz
.map((el) => el.split(" = "))
.map((el) => {
return eval(el[0]) == el[1] ? "O" : "X";
});
}