[백준/BOJ] 1541번 : 잃어버린 괄호 (JAVA / 자바)
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1541
- 문제 -
난이도 실버 2 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
항상 생각하지만 문제는 꼬아도 코드가 꼬이게 문제를 내는 경우는 이 난이도에선 별로 없다.
필자는 초반에 -가 오면 뒤에 부호가 +인가 -인가를 판단해서 +일경우 -가 다시 오기 전까지 더하고, -가 오면 더하기를 끝내고 -부호를 붙여서 계속 연산을 이어 나가는 방식으로 했다. 멍청한 생각이였다.
쉬운 방식으로 두가지 방식이 있다.
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);
}
}
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.