오늘의 코딩 테스트 한줄 - 백준 #1541 잃어버린 괄호

Edwin·2023년 5월 26일
0
post-thumbnail

백준 #1541

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

예시

문제풀이

숫자를 추출한 배열과, 연산자를 추출한 배열을 만들고 이를 reduce 메서드를 통해서 계산하는 식으로 접근했다. 그러나 문제를 풀이하면서 내가 간과한 사실이 있었다. 단순히 더하는 것이 아니라 "최소값"을 만드는 프로그램을 작성하는 것이었다. 최소값이라면 빼기를 기준으로 더하기를 많이 한 숫자에 마이너스를 붙일수록 숫자는 작아진다는 것을 망각했고, 그 결과 단수한 더하기로 처음에 계산을 실시했다.

예제1은 그 결과 -35가 아니라 45가 나왔다. 그렇다면, 마이너스를 기준으로 주어진 내용을 분리하고, 이를 합산한 결과를 도출한다면 원하는 결과를 얻을 수 있을 것이다.

const n = require('fs').readFileSync('ex.txt').toString().trim().split("-")

const solution = n.map(el => el.split('+'))
    .map(el => el.length === 1
        ? Number(el)
        : el.map(els => Number(els)).reduce((pre, cur) => pre + cur))
 
console.log(solution.reduce((pre, cur) => pre - cur))
  1. 먼저 주어진 문자열을 마이너스를 기준으로 잘랐다. 예제 첫번째 내용을 기준으로 할 때 아래와 같다.
  • ["55", "50+40"]
  1. 이를 다시 요소마다 반복하며 더하기를 기준으로 자르면, 아래와 같이 중첩배열이 생성된다.
  • ["55", ["50","40"]]
  1. 만약 중첩배열인 경우, 안애 있는 요소들의 값을 합산하였다. 그렇지 않으면 단순히 형변환을 시켰다.
  • [55, 90]
  1. 이제 남은 결과는 배열에 있는 값을 마이너스로 빼기 해주는 일이다.
  • 첫번째 예제 : 55-90 = -35가 도출된다.
  • 두번째 예제는 배열에 있는 값이 하나뿐임으로 100이 도출된다.
profile
신학전공자의 개발자 도전기!!

0개의 댓글