개발 기록 남기기✍️

[프로그래머스] 문자열 계산하기 본문

코딩 테스트 연습

[프로그래머스] 문자열 계산하기

너해동물원 2023. 1. 2. 17:57

🗒️ 문제 설명

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의 숫자와 연산자는 공백 하나로 구분되어 있습니다.

 

 

👀 입출력 예


my_string result
"3 + 4" 7

 


❇️ 나의 풀이

  • 먼저 숫자와 연산자는 공백을 기준으로 나뉘어져있기 때문에 split(" ")으로 나눠준 배열을 만든다.
  • answer의 초기값은 좌항에 해당하는 arr[0]을 할당하고, for 함수를 실행한다.
  • for 함수를 돌면서 연산자만 체크할 것이므로 한번 돌면 i+=2를 해준다.
  • i=0 일 때 arr[i+1]은 arr[1], i=2 일 때 arr[i+1]은 3으로 언제나 연산자 배열 아이템만을 가지고 조건문을 실행한다.
  • 아이템의 값이 +일 때, answer에 연산자의 우항에 위치한 arr[i+2] 값을 더해주고 - 일 때는 arr[i+2] 값을 빼준다.
    • split()을 통해 추출한 배열의 아이템들은 다 문자열이므로, Number()를 통해 숫자형으로 바꿔준 뒤 계산을 수행한다.
function solution(my_string) {
    var arr = my_string.split(" ");
    var len = arr.length;
    var answer = Number(arr[0]);
    console.log(arr);
    for(i=0;i<len;i+=2){
        if(arr[i+1] === "+"){
            answer += Number(arr[i+2])
        } else if(arr[i+1]==="-") {
            answer -= Number(arr[i+2])
        }
        console.log(answer)
    }
    return answer
}

 

 

✍️ 리뷰

✔️ 사실 eval(my_string)하면 한번에 해결될 문제이긴 한데.. 그럴려고 문제를 출제하진 않았을 듯

✔️ 악의적인 영향을 받았을 수 있는 문자열을 eval()로 실행한다면, 해당 웹페이지나 확장 프로그램의 권함으로 사용자의 기기에서 악의적인 코드를 수행하는 결과를 초래할 수 있으므로 eval 함수는 사용하지 않는 것이 좋다.