백준

[백준/BOJ] 1541번 : 잃어버린 괄호 (JAVA / 자바)

코메인 2022. 3. 19. 19:38

안녕하세요~ 코딩하는 코알못 코메인입니다.

 

 

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

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net


- 문제 -

 

난이도 실버 2 문제이다.

자바에서 입력방식은 scanner와 bufferedreader가 있다.

자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.

bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.

더 자세한 내용은 아래 글 참고 하면 좋다.

https://comain.tistory.com/3

 

(JAVA / 자바) Scanner 와 Bufferedreader

안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자

comain.tistory.com

 

풀이 방법

항상 생각하지만 문제는 꼬아도 코드가 꼬이게 문제를 내는 경우는 이 난이도에선 별로 없다.

필자는 초반에 -가 오면 뒤에 부호가 +인가 -인가를 판단해서 +일경우 -가 다시 오기 전까지 더하고, -가 오면 더하기를 끝내고 -부호를 붙여서 계속 연산을 이어 나가는 방식으로 했다. 멍청한 생각이였다.

쉬운 방식으로 두가지 방식이 있다.

1. +연산을 전부 다 해주고, - 연산을 해주는 것이다.

2. -가 왔을때 기준으로 그 뒤로는 다 - 연산을 해주는 것이다.

 

1번 예를 들면 1 + 2 + 3 - 2 - 5 + 1 + 3 - 6 + 2일 경우 + 연산을 다 해주자. 6 - 2 - 9 - 8. 나머지 연산을 해주자. -13이다. -는 싹다 무시하고 수와 +를 연산하고, 마지막에 -연산을 해주는 방식이다.

 

2번 예를 들면 1 + 2 + 3 - 2 - 5 + 1 + 3 - 6 + 2일 경우 - 기준으로 전부 다 뒤 연산을 -로 바꿔주자.

1 + 2 + 3 - 2 - 5 - 1 - 3 - 6 - 2이다. 계산 해보자. -13이 나온다.

 

필자는 2번 방식으로 풀었다.

 

코드를 보자.


-풀이-

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String S = br.readLine();
		//숫자를 저장 할 변수
		String num = "";
		//결과값을 저장 할 변수
		int result = 0;
		//-가 등장한 기점을 파악하기 위한 변수
		boolean minus = false;
		
		for(int i = 0; i < S.length(); i++) {
			if(S.charAt(i) != '-' && S.charAt(i) != '+') {
				num += S.charAt(i);
			}
			//연산 기준은 -또는 +가 등장 했을때, 또는 마지막 값까지 입력 되었을 때이다.
			if(S.charAt(i) == '-' || S.charAt(i) == '+' || i == S.length() - 1) {
				//minus가 false면 더하기, true면 빼기를 해준다.
				if(!minus) {
					result += Integer.parseInt(num);
				}else {
					result -= Integer.parseInt(num);
				}
				//num을 연산해줬으면 초기화
				num = "";
			}
			//-가 등장하면 minus에 true를 저장.
			if(S.charAt(i) == '-') {
				minus = true;
			}
		}
		System.out.println(result);
	}

}

-결과-

 


아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.