알고리즘/DFS BSF

백준 - 16637 괄호 추가하기

2024. 1. 31. 17:28
목차
  1. 문제
  2. 문제 풀이

문제

https://www.acmicpc.net/problem/16637

 

16637번: 괄호 추가하기

첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가

www.acmicpc.net

왼쪽부터 계산하는 수식에 괄호를 추가해 식의 최댓값을 구하는 문제였다.

 

문제 풀이

처음에 이 문제를 굳이 그리디로 풀려고 시도하다가 조건이 너무 많아져서 실패했다. 그냥 dfs로 푸니까 쉽게 해결됐다..

 

dfs를 할 때, 다음 연산을 바로 하는 경우와 다음 숫자와 다다음 숫자가 다다음 연산을 먼저 하는 경우로 나뉘게 하면 된다.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> nums;
vector<char> opers;
long long maxResult = -987654321;
long long operResult(long long result, int nextNum, char nextOper) {
if (nextOper == '+') {
return result + nextNum;
}
else if (nextOper == '*') {
return result * nextNum;
}
else if (nextOper == '-') {
return result - nextNum;
}
}
void dfs(long long result, int index) {
//printf("index: %d result: %lld\n", index, result);
if (index >= nums.size()-1) {
maxResult = max(maxResult, result);
//printf("\n");
return;
}
int nextNum = nums[index+1];
char nextOper = opers[index+1];
dfs(operResult(result, nextNum, nextOper), index + 1);
if (index + 2 <= nums.size() - 1) {
//printf("괄호 사용 result: %lld\n", result);
int nenextNum = nums[index + 2];
char nenextOper = opers[index + 2];
//printf("nextNum: %d nextOper: %c nenextNum: %d nenextOper: %c\n", nextNum, nextOper, nenextNum, nenextOper);
dfs(operResult(result, operResult(nextNum, nenextNum, nenextOper), nextOper), index + 2);
}
}
int main(int argc, char** argv)
{
int N;
scanf("%d", &N);
char a;
long long result;
for (int i = 0; i <= N; i++) {
scanf("%c", &a);
if (a >= '0' && a <= '9') { //숫자
nums.push_back(a - '0');
}
else {
opers.push_back(a);
}
}
dfs(nums[0], 0);
printf("%lld", maxResult);
}
  1. 문제
  2. 문제 풀이
'알고리즘/DFS BSF' 카테고리의 다른 글
  • 백준 - 20924 트리의 기둥과 가지
  • 백준 - 22251 빌런 호석
  • 백준 - 23747 와드
  • 백준 - 13265 색칠하기
hahihi
hahihi
hahihi
히호 노트
hahihi
전체
오늘
어제
  • 분류 전체보기 (224)
    • 알고리즘 (114)
      • 정렬 (3)
      • 그리디 (9)
      • 구현 (35)
      • 이분 탐색 (4)
      • 탐색 (2)
      • 동적 계획법 (DP) (11)
      • DFS BSF (29)
      • 최단 경로 (5)
      • 그래프 (4)
      • 주의할 점 (4)
      • 트리 (3)
    • spring (34)
      • JPA (12)
    • DevOps (10)
      • Docker (3)
    • java (15)
      • 이펙티브자바 (4)
      • Clean Code (4)
    • git (9)
    • DB (3)
    • 앱개발 (1)
    • 유닉스 (26)
    • 네트워크 (3)
      • IT 엔지니어를 위한 네트워크 입문 (3)
    • 유니티 (1)
    • 후기 (4)
    • 누누코코 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 팀 결성
  • 이코테
  • 공통 response
  • JWT
  • allowPublicKeyRetrieval
  • 1868
  • BaseEntity
  • 숫자 조각
  • 도넛과 막대 그래프
  • spring
  • SWEA
  • 4193
  • 입출력
  • 프로그래머스
  • 백준
  • Docker
  • 13265
  • 그리디 알고리즘
  • dp
  • 7465

최근 댓글

최근 글

hELLO · Designed By 정상우.
hahihi
백준 - 16637 괄호 추가하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.