문제(출처: 프로그래머스)
덧셈, 뺄셈 수식들이 '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 을 한 후 구조분해를 하면 코드가 좀더 간결해진다.
-
'프로그래밍 > 코딩연습' 카테고리의 다른 글
[ JS 코딩연습 ] 캐릭터의 좌표 (0) | 2024.05.17 |
---|---|
[ JS 코딩연습 ] 7의 개수 (0) | 2024.05.15 |
[ JS 코딩연습 ] 문자열 계산하기 (0) | 2024.05.12 |
[ JS 코딩연습 ] 영어가 싫어요 (0) | 2024.05.12 |
[JS 코딩연습] 369 게임 (0) | 2024.05.11 |