반응형
    
    
    
  
                              Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - 수학
- typescript
- 알고리즘
- HTTP
- javascript
- type challenge
- ip
- Crawling
- 프로그래머스
- HTTP 완벽 가이드
- 크롤링
- Nestjs
- 쉬운 문제
- socket
- BFS
- Node.js
- 백준
- 자바스크립트
- 타입스크립트
- 타입 챌린지
- dp
- 소켓
- 레벨 1
- 문자열
- 프로그래머스 레벨 2
- Algorithm
- 가천대
- TCP
- dfs
- 그래프
                            Archives
                            
                        
                          
                          - Today
- Total
kakasoo
[node.js] 수식 최대화 ( 프로그래머스 레벨2 ) 본문
반응형
    
    
    
  // 프로그래머스 레벨 2 [카카오 인턴] 수식 최대화
const getPriority = () => {
    const operator = ["+", "-", "*"];
    const priority = [];
    let visited;
    let answer;
    const dfs = (start) => {
        visited[start] = true;
        answer.push(operator[start]);
        if (answer.length === 3) {
            priority.push([...answer]);
        }
        for (let i = 0; i < operator.length; i++) {
            if (!visited[i]) {
                visited[i] = true;
                dfs(i);
                visited[i] = false;
                answer.pop();
            }
        }
    };
    for (let i = 0; i < operator.length; i++) {
        visited = new Array(3).fill(false);
        answer = [];
        dfs(i);
    }
    return priority;
};
const splitExpression = (expression) => {
    let answer = [expression];
    ["+", "-", "*"].forEach((operator) => {
        for (let i = 0; i < answer.length; i++) {
            const diviedExpresses = answer[i].split(operator);
            const temp = [];
            for (let i = 0; i < diviedExpresses.length; i++) {
                temp.push(diviedExpresses[i]);
                temp.push(operator);
            }
            temp.pop();
            answer[i] = temp;
        }
        answer = answer.flat();
    });
    return answer;
};
const evalueateExpress = (express, priority) => {
    priority.forEach((operator) => {
        while (express.includes(operator)) {
            const operatorIdx = express.indexOf(operator);
            const firstOperand = operatorIdx - 1;
            const secondOperand = operatorIdx + 1;
            express.splice(
                firstOperand,
                3,
                eval(express[firstOperand] + operator + express[secondOperand])
            );
        }
    });
    return express;
};
const solution = (expression) => {
    const priority = getPriority();
    const answer = [];
    priority.forEach((el) => {
        const diviedExpresses = splitExpression(expression);
        const curValue = evalueateExpress(diviedExpresses, el);
        answer.push(curValue);
    });
    return Math.max(
        ...answer.flat(Infinity).map((el) => (el >= 0 ? el : el * -1))
    );
};
가능한 경우의 수를 뽑아서 모두 돌려보는 수 밖에 없다.
반응형
    
    
    
  '프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
| [node.js] 예상 대진표 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
|---|---|
| [node.js] 게임 맵 최단 거리 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
| [node.js] 신규 아이디 추천 ( 프로그래머스 레벨1 ) (0) | 2021.06.30 | 
| [node.js] 로또의 최고 순위와 최저 순위 ( 프로그래머스 레벨1 ) (0) | 2021.06.30 | 
| [node.js] 폰켓몬 ( 프로그래머스 레벨1 ) (0) | 2021.06.30 | 
 
                   
                   
                  