광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DP
  • 백준
  • 티스토리챌린지
  • BFS
  • 알고리즘
  • 자바
  • 컴퓨터 사이언스
  • 애플워치 앱
  • 운영체제
  • 합주
  • 구현
  • 드린이
  • 파이썬
  • 프로그래머스
  • 오블완
  • 다이나믹 프로그래밍
  • BOJ
  • OS
  • 개념
  • 애플워치 앱 만들기

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java 백준 16637] 괄호 추가하기

2022. 3. 7. 18:06
반응형

풀이

괄호가 중복된 것을 허용하지 않고, 연산자 우선순위가 동일하므로 왼쪽부터 계산하는 문제입니다.

 

연산자와 숫자를 나누어 담고

dfs를 활용해서, 케이스를 인덱스 기반으로

1. 괄호를 안친것으로 계산 과정

2. 괄호를 친것으로 계산 과정

두가지로 나누어서 진행했습니다.

 

첫번째 경우는 index, index + 1 를 연산과정을 하고 다음 dfs 

두번째 경우는 index + 1, index +2를 먼저 연산하고, 지금까지 계산한 것과 다시 또 연산하고 다다음 dfs 

import java.io.*;
import java.util.*;

public class Main {
	static int N, max=Integer.MIN_VALUE;
	static ArrayList<Integer> number = new ArrayList<>();
	static ArrayList<Character> operation = new ArrayList<>();
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		String input = br.readLine();
		for(int i = 0 ; i < N ; i++) {
			if(i % 2  == 0) number.add(input.charAt(i) -'0');
			else operation.add(input.charAt(i));
		}
		
		dfs(0, number.get(0));
		System.out.println(max);
	}
	
	private static void dfs(int index, int sum) {
		if(index >= N/2) {
			max = Math.max(sum, max);
			return;
		}
		// 그냥 진행 
		dfs(index + 1, calculate(index, sum, number.get(index+1)));
		
		// 괄호 치고 진행 
		if(index + 1 < N/2) {
			// 뒤에 괄호쳤다고 생각하고 계산 
			int num = calculate(index + 1, number.get(index + 1), number.get(index + 2));
			// 현재 연산자와 다음 괄호를 쳐서 우선 연산 한것을 계산 
			dfs(index + 2, calculate(index, sum, num));
		}
	}
	
	private static int calculate(int index, int a, int b) {
		char op = operation.get(index);
		int result = 0;
		if(op == '+') {
			result = a+b;
		}
		else if(op == '*') {
			result = a * b;
		}
		else if(op == '-') {
			result = a - b;
		}
		return result;
	}
	
}
반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 백준 1976] 여행가자  (0) 2022.03.09
[Java/자바 백준 17406] 배열돌리기 4  (0) 2022.03.08
[Java/자바 백준 17281] 공  (0) 2022.02.28
[Java/자바 백준 9466] 텀 프로젝트  (0) 2022.02.23
[Java/자바 백준 10655] 마라톤 1  (0) 2022.02.22
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 1976] 여행가자
    • [Java/자바 백준 17406] 배열돌리기 4
    • [Java/자바 백준 17281] 공
    • [Java/자바 백준 9466] 텀 프로젝트
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바