Level 0) 문자열, 수학, 조건문, 배열, 사칙연산

Doozuu·2023년 1월 16일
0

프로그래머스 (JS)

목록 보기
18/183

📌 문제 1. 숫자 찾기

처음에 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
}



📌 문제 2. n의 배수 고르기

filter를 이용해 나누어 떨어지는 것들만 골라낸다.

function solution(n, numlist) {
    return numlist.filter(x => x % n === 0);
}



📌 문제 3. 자릿수 고르기

숫자를 문자열로 바꾼 후 배열에 쪼개 담아서 reduce를 이용해 다 더해준다.
(문자열인 상태로 더하면 안되므로 다시 숫자로 바꾸며 더해주어야 함)

배열에 쪼개 담는 방법은 아래처럼 spread operator를 이용해도 되고 split을 이용해도 된다.

function solution(n) {
    return [...n.toString()].reduce((a,b) => Number(a)+Number(b), 0);
}



📌 문제 4. OX 퀴즈

반복문 안에 조건문을 넣어 계산해주었다.

변수는 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";
    });
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글