문제(출처: 프로그래머스)

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
  • 1 ≤ quiz의 길이 ≤ 10
  • X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
  • X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
  • -10,000 ≤ X, Y ≤ 10,000
  • -20,000 ≤ Z ≤ 20,000
  • [연산자]는 + 와 - 중 하나입니다.

 

▶ 내가 푼 방식

function solution(quiz) {
    var answer = [];
    quiz.forEach((v) =>{
        let equation = v.split(' ');
        if(equation[1] === "-"){
            let result = Number(equation[0]) - Number(equation[2]);
            if (result === Number(equation[4])){
                answer.push("O")
            }
            else answer.push("X")
        }
        if(equation[1] === "+"){
            let result = Number(equation[0]) + Number(equation[2]);
            if (result === Number(equation[4])){
                answer.push("O")
            }
            else answer.push("X")     
        }
    })
    return answer;
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(quiz) {
    var answer = [];
    return quiz.map(t => {
        const [calc, result] = t.split(' = ');
        const sign = calc.includes('+') ? 1 : -1
        const [a, b] = calc.split(sign === 1 ? ' + ' : ' - ');

        return +a + (+b * sign) === +result ? 'O' : 'X'
    });
}

// 유저 2
function solution(quiz) {
    let answer = [];
    quiz.forEach((val) => {
        const [x, sign, y, , z] = val.split(" ");
        let sum = 0;
        if (sign === "+") {
            sum = Number(x) + Number(y);
        } else {
            sum = Number(x) - Number(y);
        }
        sum === Number(z) ? answer.push("O") : answer.push("X");
    });
    return answer;
}

// 유저 3

 

 배운 것들

     -  split 을 한 후 구조분해를 하면 코드가 좀더 간결해진다.

     - 

+ Recent posts