-
[백준/BOJ] 1541번 : 잃어버린 괄호 (JAVA / 자바)백준 2022. 3. 19. 19:38
안녕하세요~ 코딩하는 코알못 코메인입니다.
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); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1748번 : 수 이어 쓰기 1 (JAVA / 자바) (0) 2022.03.21 [백준/BOJ] 11653번 : 소인수분해 (JAVA / 자바) (0) 2022.03.21 [백준/BOJ] 5635번 : 생일 (JAVA / 자바) (0) 2022.03.18 [백준/BOJ] 2581번 : 소수 (JAVA / 자바) (0) 2022.03.17 [백준/BOJ] 2606번 : 바이러스 (JAVA / 자바) (0) 2022.03.17