반응형
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 | 31 |
Tags
- 프로그래머스 레벨 2
- Node.js
- type challenge
- dp
- javascript
- 알고리즘
- 타입 챌린지
- TCP
- HTTP 완벽 가이드
- ip
- dfs
- 소켓
- 그래프
- typescript
- 자바스크립트
- Nestjs
- HTTP
- BFS
- 백준
- 수학
- 타입스크립트
- 가천대
- socket
- 레벨 1
- 프로그래머스
- 쉬운 문제
- 크롤링
- 문자열
- Crawling
- Algorithm
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 |