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 |
Tags
- 메모리풀
- 이분 탐색
- 중복 순열
- 순열
- lis
- 비트마스크
- dfs
- BFS
- BeautifulSoup
- 조합
- 백트래킹
- 스택
- 재귀
- 문자열
- MST
- 큐
- 분할 정복
- 링크드리스트
- 세그먼트 트리
- DP
- Knapsack
- 피보나치 수
- 우선순위 큐
- 클래스
- 크루스칼
- 그리디
- 빠른 입출력
- SSAFY
- 시뮬레이션
- 완전 탐색
Archives
- Today
- Total
작심 24/7
[백준] 16637번 괄호 추가하기 본문
1. 괄호로 묶지 않는 경우
이전까지의 값 OP 숫자
= res a[idx] a[idx+1]
2. 괄호로 묶는 경우
이전까지의 값 OP (숫자 OP 숫자)
= res a[idx] (a[idx+1] a[idx+2] a[idx+3])
재귀 호출을 이용해 수식의 처음부터 끝까지 돌면서
1번 경우는 무조건 계산하고
2번 경우는 뒤에 남은 수식이
괄호를 추가할 수 있을 만큼 남아있는 경우에만 계산한다.
#include <iostream>
#include <string>
#include <algorithm>
#include <climits>
using namespace std;
int N, Max = INT_MIN;
string a;
int cal(int a, char op, int b) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
}
}
void Solution(int idx, int res) {
if (idx > N - 1) {
Max = max(Max, res);
return;
}
if (idx + 4 <= N) { // 괄호로 묶을 수 있는 경우
Solution(idx + 4, cal(res, a[idx], cal(a[idx + 1] - '0', a[idx + 2], a[idx + 3] - '0')));
}
Solution(idx + 2, cal(res, a[idx], a[idx + 1] - '0'));
}
int main() {
cin >> N >> a;
Solution(1, a[0] - '0');
cout << Max;
return 0;
}
'백준' 카테고리의 다른 글
[백준] 17135번 캐슬 디펜스 (C++, JAVA) (0) | 2020.08.17 |
---|---|
[백준] 17070번 파이프 옮기기 1 (0) | 2020.08.17 |
[백준] 17825번 주사위 윷놀이 (0) | 2020.08.06 |
[백준] 17822번 원판 돌리기 (0) | 2020.08.04 |
[백준] 11659번 구간 합 구하기 4 (0) | 2020.08.03 |
Comments