백준 1541번 잃어버린 괄호(JAVA, 그리디)

민성재·2021년 4월 22일
0

Algorithm & Coding Test

목록 보기
14/20

<풀이방식>

1. 먼저 처음 주어지는 수식을 '-' 기준으로 자른다. 이유는 '-' 양쪽에 있는 애들을 각각 더해서 빼는게 가장 차이가 크게 벌어지기 때문이다. 예제를 기준으로 55-50+40 은 55 , 50+40 으로 나뉜다.

2. 앞에서 '-' 기준으로 나눈 토큰을 다시 '+'기준으로 잘라서 각각 더해준다. 예제를 기준으로 55, 50+40 이니까 각각 55, 90이된다.

3. 각각의 숫자를 리스트에 넣고 서로 뺀다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		String str = sc.next();
		
		ArrayList<String> strList = new ArrayList<>();
		int cnt = 0;
		
		// 1. '-' 기준으로 잘라서 리스트에 추가
		for(int i = 0 ; i < str.length(); i++) {
			if(str.charAt(i) == '-' ) {
				String token = str.substring(cnt, i);
				strList.add(token);
				cnt = i+1; //다음 글자로 포인터 옮겨둠
			}
			else if(i == str.length()-1) {
				String token = str.substring(cnt, i+1);
				strList.add(token);
				
			}
		}
		
		
		
		ArrayList<Integer> numList = new ArrayList<>();
		//2. '+' 기준으로 잘라서 각각 더해줌
		for(int i = 0 ; i < strList.size(); i++) {
			String token = strList.get(i);
			int cnt2 = 0;
			int total = 0;
			for(int j = 0 ; j < token.length(); j++ ) {
				if(token.charAt(j) == '+' ) {
					total += Integer.parseInt(token.substring(cnt2, j));
					cnt2 = j+1;
				}
				else if(j == token.length()-1) {
					total += Integer.parseInt(token.substring(cnt2, j+1));
				}
			}
			numList.add(total);
		}
		
	
			
		
		//3. 리스트에 있는 값 다 가져와서 빼버린게 정답.
		int answer = numList.get(0);
		for(int i = 1; i < numList.size(); i++) 
			answer -= numList.get(i);
		
		System.out.println(answer);
	}
}


profile
민성재 개발 블로그

0개의 댓글