본문 바로가기
알고리즘/Programmers

[TIL] 2023.04.12 Programmers_OX 퀴즈

by heereal 2023. 4. 12.

Today I Learned

  • Programmers 문제 풀기

 


Programmers 문제 풀기

OX 퀴즈

문제 설명

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

 

입출력 예

quiz result
["3 - 4 = -3", "5 + 6 = 11"] ["X", "O"]
  • 3 - 4 = -3 은 틀린 수식이므로 "X", 5 + 6 = 11 은 옳은 수식이므로 "O"입니다. 따라서 ["X", "O"]를 return 합니다.

 

나의 풀이

function solution(quiz) {
    let answer = [];
    for (const x of quiz) { 
        let array = x.split(" ");
        if (array[1] === "+") {
            parseInt(array[0]) + parseInt(array[2]) === parseInt(array[4]) 
            ? answer.push("O") 
            : answer.push("X")
        } 
        if (array[1] === "-") {
            parseInt(array[0]) - parseInt(array[2]) === parseInt(array[4]) 
            ? answer.push("O") 
            : answer.push("X")
        }
    }
    return answer
}
  1. quiz 배열에 for문을 돌린다.
  2. 각 요소마다 ""으로 split 한 후 연산자가 +인지 -인지에 따라 if문으로 처리한다.
  3. parseInt를 사용해서 문자열을 숫자로 변환한 후에 식을 계산한다.
  4. 계산한 값이 true, false인지에 따라 answer에 "O" 혹은 "X"를 push 한다.

 

다른 사람의 풀이 01

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'
    });
}

구조분해할당을 활용한 풀이 방법이다. includes 메서드를 이용해서 연산자가 +인지 -인지 판단한 후에 return문에 (+b * sign)으로 출력한 아이디어도 재밌었다.

 

다른 사람의 풀이 02

function solution(quiz) {
  return quiz
    .map((el) => el.split(" = "))
    .map((el) => {
      return eval(el[0]) == el[1] ? "O" : "X";
    });
}

eval()은 문자로 표현된 JavaScript 코드를 실행하는 함수라는데 웬만하면 사용을 지양하는 거 같다.

 


회고

금요일에 코테를 볼 계획이기 때문에 오늘은 알고리즘 문제를 많이 풀었다. 블로그에 따로 기록은 안 했지만 '해커랭크'라는 사이트에서 꽤나 많이 풀었음. 맨날 프로그래머스에서만 풀다가 다른 사이트에서 풀어보니까 문제 유형이 다른 느낌도 들고 해서 재밌었다~ 그리고 오늘부터 프로그래머스 문제 푼 거 좀 더 정리해서 올려보려 한다!

 

 

 

댓글