[자바스크립트]2020 카카오 인턴쉽 수식 최대화

Woongbee Park·2022년 4월 26일
0

연산자는 [* + -] 3개만 쓰이는 수식이 주어지고,
기존의 연산 순서와는 다르게 계산하여 어떤 연산자를 우선순위로 계산해야
최댓값이 나오는지 찾는 문제이다.
즉, 원래대로라면 먼저, +-연산은 그 다음에 계산하는 것이 맞지만
만약 +를 먼저 계산 후
를 계산, 그리고 -를 마지막에 계산한 결과값이 더 크다면 이 순서로 계산하여 최댓값을 산출하는 문제

내가 푼 코드의 기본 아이디어는 아래와 같다.

  1. 수식에서 숫자만 따로 뽑아 배열을 만든다.

  2. 수식에서 연산자만 따로 뽑아 배열을 만든다.
    ex)"100-200300-500+20"
    const nums= [100,200,300,500,20]
    const operator =[-,
    ,-,+]

    정규 표현식으로 주어진 수식 expression을 분리할거얌

    3.연산자 3개(*,-,+)의 가능한 순서 조합을 배열로 만든다.

  1. 연산자 순서조합 permutation을 map으로 순회하며,
    숫자배열과 연산자 배열을 계산한다.
    어떻게?
    +-* 조합으로 예를들면,
    연산자 조합의 배열을 for문으로 돌며, + 연산자가 있는지 찾는다.
    (없으면 continue)
    있다면, 아래와 같은 연산을 한다.
    찾은 연산자를 기준으로 숫자를 계산하고, 연산된 숫자 2개를
    계산한 결과값 1개로 대체/ 그후 계산한 연산자는 삭제.

만약 삭제가 이루어졌다면, 반복문에 쓰이는 변수 i값을 -1로 초기화해주어서, nums, operator 배열을 처음부터 다시 돈다. (같은 연산자가 3번, 4번 반복해서 나올 수 있으니 계속 찾으려고)

어떤 과목이었는지는 기억이 안나는데
후위표기, 중위표기 같은 수식 표기법을 배울때
stack 자료형에 숫자랑 연산자가 들어왔다 나갔다 하는 이미지가 떠올라서
그렇게 풀었다.

아래는 전체코드

마지막에 return max; 해주면 끝

profile
나는야 개발자

0개의 댓글