문제
my_string은 "3 + 5"처럼 문자열로 된 수식입니다.
문자열 my_string이 매개변수로 주어질 때,
수식을 계산한 값을 return 하는 solution 함수를 완성해주세요..
제한사항
연산자는 +, -만 존재합니다.
문자열의 시작과 끝에는 공백이 없습니다.
0으로 시작하는 숫자는 주어지지 않습니다.
잘못된 수식은 주어지지 않습니다.
5 ≤ my_string의 길이 ≤ 100
my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
my_string에는 연산자가 적어도 하나 포함되어 있습니다.
return type 은 정수형입니다.
my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.
풀이
function solution(my_string) {
let splitString = my_string.split(' ');
let result = 0;
for(let i = 0; i < splitString.length; i += 2){
if(i === 0){
result = Number(splitString[i]);
continue;
}
if(splitString[i-1] === '+'){
result += Number(splitString[i]);
}else if(splitString[i-1] === '-'){
result -= Number(splitString[i]);
}
}
return result;
}
1차 풀이본.
문자열인 my_string은 시작과 끝에 공백이 없고, 숫자와 연산자는 공백 하나로 구분 되어있으니
공백 하나로 split해주어 숫자와 연산자로 이루어진 배열로 만들어 splitString 변수에 할당한 뒤
result 값을 0으로 초기화 시킨다.
splitString 의 원소만큼 for문으로 반복을 하는데,
splitString은 [ 숫자 - 연산자 - 숫자 - 연산자 ... ] 인 모양이므로, i는 0부터 시작해서 2씩 증가 하게 하였다.
i 가 0인 경우 (처음인 경우) result에 현재 원소(즉 첫번째 원소) 를 넣어 준뒤 continue로 넘어가준다.
i가 0이 아닌경우 splitString[i-1] 가 연산자 "+"인지 "-"인지를 판단 해서,
"+"인 경우 result에 splitString[i]를 더해주고, "-"인 경우 splitString[i]를 빼준다.
위 반복문이 완료되면 result를 리턴해준다.
Ps.
처음엔 수식이 연속된다고 생각을 못하고 [ a, op, b ]의 모양으로 주어질꺼라고 생각해서
3개를 기준으로 테스트를 해서 통과한 뒤 제출할때 다 실패였다.
문제와 제한사항을 꼼꼼히 읽어보는 습관을 가져야 할듯.