본문 바로가기

Programing/어려웠던 문제

[JavaScript] 5-4 findMinByBracket


문제 :

문자열로된 수식을 입력했을때 괄호를 만들어서 계산했을 때 결과가 최대한 최솟값이 나오도록 하세요.




예 :

input : '55-50+40'  // => 55-(50+40)

output : -35 



내 답 :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
var userInput = prompt("Enter a string:");
 
var findMinByBracket  = function(str) {
  // -30-10-50+30-3122+325  => -3567
  // var exceptMinusArr = str.split('-') => ["", "30", "10", "50+30", "3122+325"]
  // exceptMinusArr.forEach 후 elem.length가 0 이라면 (''인 경우) elem = '0'으로 바꿔줌
  // var exceptPlusMinus = []; exceptPlusMinus.push(eval(elem))  => [ 0, 30, 10, 80, 3447 ]
  // var resultStr = exceptPlusMinus.join('-') => '0-30-10-80-3447'
  // return eval(resultStr);
  
  var exceptMinusArr = str.split('-');
  var exceptPlusMinus = [];
  
  exceptMinusArr.forEach((elem, i) => {
    if(exceptMinusArr[i].length === 0) {
      exceptMinusArr[i] = '0';
    }
  });
  
  exceptMinusArr.forEach(elem => {
    exceptPlusMinus.push(eval(elem));
  });
     
  var resultStr = exceptPlusMinus.join('-');
  return eval(resultStr);
  
  //console.log(exceptMinusArr);
  //console.log(exceptPlusMinus);
 
};
 
console.log(findMinByBracket (userInput));
 
 
// -30-10-50+30-3122+325  => -3567
// -30-10-(50+30)-(3122+325)
// +끼리 묶어준다.
 
cs



그런데 eval()을 쓰면 좋지 않아서 

eval() 기능을 하는 함수를 만들어봤다.

이 eval 대신 이 함수를 적용해도 같은 값이 나온다.


eval() 대체 함수