프론트엔드 개발자의 기록 공간

[백준 node.js] 1541번_잃어버린 괄호 본문

알고리즘_JS/백준_Greedy

[백준 node.js] 1541번_잃어버린 괄호

[리우] 2020. 12. 25. 23:38

백준 그리디 알고리즘 2217번_로프

난이도 : 실버II

 

문제 설명

입출력

 

문제 풀이 : 주어진 식에서 가장 최소 값으로 만들면된다. 주어진 예제에서는 55-(50+40) 일때 가장 최소 값이 나온다.

즉, - 기준으로 입력을 받아 리스트에 정렬해준다. 그러면 리스트 안에는 숫자만 있거나 +연산이 존재한다.

반복문을 통해 + 연산 기준으로 연산을 수행해준후 리스트를 반복문으로 돌면서 값을 빼주면 최소값이 나온다.

예를들어 55-50+40+20-10+5 가 입력으로 주어지면 -기준으로 나누어준다. [55, 50+40+20, 10+5] 가 된다.

이후 리스트 요소별로 계산을 해준다. [55, 110, 15] 가 된다. 이후 반복문을 통해 값을 빼주면 최소값이 된다.

55 - 110 - 15 = -70

 

function solution(list) {
    let tmp = [];

    //-로 분리된 list를 다시한번 +기준으로 분리 시킨후 각각의 배열요소의 합을 구함
    for(i of list){
        let cnt = 0;
        let s = i.split("+");
        //+로 분리후 cnt에 값을 더한후 tmp에 삽입
        for(j of s){
            cnt += parseInt(j);
        }
        tmp.push(cnt);
    }

    //  위 과정을 eval함수로 함축할 수 있다. 하지만 백준사이트에서는 오류가 발생긴다.
    //  //list 각각의 요소 전부 계산 eval이용
    //  for(i of list){
    //     tmp.push(eval(i));
    // }

    let result = tmp[0];

    //연산된 결과값에 - 를 붙여 계산
    for(let j=1; j<tmp.length; j++){
        result -= tmp[j];
    }
    console.log(result);

}

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let input;
rl.on("line", function (line) {
    input = line;
    rl.close();
}).on("close", function () {
    //-기준으로 문자열 분리
    let list = input.split('-');
    solution(list);
});

 

* JS에서는 eval 함수가 존재한다. eval은 문자열로 된 연산을 처리해주는 함수이다. 즉 "50-15+50" 이라는 문자열이 있다면 이것을 eval함수를 이용하면 알아서 수식처리를 해주는 아주 유용한 함수이다. 그래서 나는 -기준으로 나눈후 각각의 연산을 eval로 해주어서 제출했는데 실패 처리가 되었다. 결과값과 과정은 동일한데 실패 처리가 된다. 아마 백준에서 node.js가 완벽히 지원안되는 탓인거같다.

728x90
Comments