gurwhddl
코알못 공부블로그
gurwhddl
전체 방문자
오늘
어제
  • 분류 전체보기
    • CSS
    • JS
    • node.JS
    • REACT
    • 코딩테스트 연습

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gurwhddl

코알못 공부블로그

코딩테스트 연습

프로그래머스 - 수식 최대화 JS

2023. 7. 24. 21:44

접근법

[+ , - , *] 3가지 연산의 우선순위를 정해 그에 맞게 계산을 한 다음, 그 값(절댓값) 중 가장 큰 값을 return하면 되는데
생각해야 될 문제는

  1. "100-200+300-500+20" 이렇게 연산이 문자열로 나와있어서 연산자와 숫자를 분리시켜야 함
  2. 연산자를 계산 후에 그 자리에 계산한 값을 넣어야함
  3. 연산자 종류가 무조건 3개라고 한 적은 없음 + 연산자가 중복으로 있을수도 있음

일단 문자열을 숫자와 연산자로 분리해서 배열로 바꿔줬고 연산자의 우선순위 경우의 수를 모두 구해서 반복문으로 하나씩 실행

  1. 배열에서 해당 연산자를 찾음(indexOf)
  2. 해당 연산자의 index-1 , index+1은 무조건 숫자이기 때문에 이 둘을 연산자 타입에 맞게 계산해줌
  • [..., - , 200 , * , 300, + ,...]의 경우 200,*,300이 있는 부분을 그 계산값인 60000으로 바꿔줘야 그 다음 계산이 가능함
  1. 배열에서 연산이 완료된 부분을 그 값으로 바꾸기 위해서는 splice()를 사용하면 됨
  2. splice(시작idx,제거할 원소 갯수,대신 넣을 아이템) => splice(연산자 위치-1,3,계산값)
  3. 연산자가 중복으로 있을 경우도 있기 때문에 indexOf(연산자,직전에 찾은 연산자의 위치)를 통해 직전에 찾은 연산자 뒤의 원소에 똑같은 연산자가 있는지 확인해줌

코드

function solution(expression) {
    const pattern = /(\d+|[-*+])/g
    const arr = expression.match(pattern)
    const operators =     [[ '+', '-', '*' ],
            [ '+', '*', '-' ],
            [ '-', '+', '*' ],
            [ '-', '*', '+' ],
            [ '*', '+', '-' ],
            [ '*', '-', '+' ]]
    const calculate = (a,b,op) => {
        switch(op){
            case '*':
                return a * b
                break
            case '+':
                return a + b
                break
            case '-':
                return a - b
                break
        }
    }
   const result = []
   for(let operator of operators){
       let copy = [...arr]
       for(let op of operator){
         let start = 0
         while(copy.indexOf(op,start) > -1){
         const idx = copy.indexOf(op)
         const result = calculate(+copy[idx-1],+copy[idx+1],op)
         copy.splice(idx-1,3,result)
         start = idx
         }
       }
     result.push(Math.abs(copy[0]))
   }
    return Math.max(...result)
    }
저작자표시 (새창열림)

'코딩테스트 연습' 카테고리의 다른 글

프로그래머스 - 거리두기 확인하기  (0) 2023.08.03
프로그래머스 - 귤 고르기 JS  (0) 2023.07.28
프로그래머스 - 입국심사 JS  (0) 2023.07.16
프로그래머스 - 부대복귀 JS  (0) 2023.06.26
백준 1411 - 비슷한 단어 JS  (0) 2023.06.16
    '코딩테스트 연습' 카테고리의 다른 글
    • 프로그래머스 - 거리두기 확인하기
    • 프로그래머스 - 귤 고르기 JS
    • 프로그래머스 - 입국심사 JS
    • 프로그래머스 - 부대복귀 JS
    gurwhddl
    gurwhddl

    티스토리툴바