-
[코딩테스트] 백준(BAEKJOON) - 잃어버린 괄호(Java, 1541번)코딩테스트/백준 2023. 4. 13. 23:37728x90
안녕하세요.
밀린 코딩테스트 문제들을 올리느라 정신이 없네요.
아마 또 밀린걸 다음에 올리겠죠...?
저의 게으름이란... ㅠㅠㅠ
이번에 만나볼 문제는 잃어버린 괄호라는 문제입니다.
이렇게 문제를 생각해내시는 분들보면 정말 대단한것같습니다.
문제 바로 만나보시죠~
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
결론은! 괄호를 이용해서 최소의 수를 만들어라! 이거죠~
제가 작성한 코드를 남기며 설명간단하게 적겠습니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import java.util.Scanner; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); String line=bf.readLine(); StringBuilder sb=new StringBuilder(); int answer=0; boolean minusChecker=false; for(int i=0;i<line.length();i++) { if(line.charAt(i)=='-') { if(minusChecker) answer=answer-Integer.parseInt(sb.toString()); else answer=answer+Integer.parseInt(sb.toString()); sb.setLength(0); minusChecker=true; } else if(line.charAt(i)=='+') { if(minusChecker) answer=answer-Integer.parseInt(sb.toString()); else answer=answer+Integer.parseInt(sb.toString()); sb.setLength(0); } else sb.append(line.charAt(i)); } if(minusChecker) answer=answer-Integer.parseInt(sb.toString()); else answer=answer+Integer.parseInt(sb.toString()); System.out.println(answer); } }
- 제가 생각한 로직의 간단한 원리입니다. 만약 -가 한 번이라도 붙는다면 - 이후의 모든 숫자들은 +,-기호 상관없이 다 -를해준다. -기호가 나오기 전까지 모든수는 +를 한다.
라는 생각을 하며 문제를 풀었습니다.
① String.charAt()을 통해 String을 한글자씩 자르고 StringBuilder를 숫자끼리는 append합니다. 그리고 + or -기호를 만나면 append된 StringBuilder를 숫자로 변환하고 StringBuilder를 청소합니다.
②minusChecker입니다. minusChecker는 -기호를 만나기 전까지는 false값을 유지하며 +값에 대해 +연산을 진행합니다.(당연한 거겠죠?)
③minusChecker가 true일 경우 즉 -기호를 만났을 경우입니다. 그러면 이제 다가오는 기호가 - or + 상관없이 StringBuilder에 숫자가 담기는 대로 다 -연산을 하면 되겠습니다.
한 번이라도 -기호를 만난다면 -(a+b+c+d+e...)이렇게 괄호를 다 씌어버리면 되기 때문입니다.
그럼중간에 -기호를 만나면요?~생각이 들 수 도 있지만 -기호는 어차히 -이기에 같이 -해주면 되겠습니다.
④ 이렇게 하면 마지막 StringBuilder가 연산이 되지 않습니다. 그렇기에 반복문이 끝난뒤에 한번 더 minusChecker를 통해 연산을 진행해주면 되겠습니다.
이렇게 잃어버린 괄호! 문제 마무리하겠습니다.
감사합니다. :D
'코딩테스트 > 백준' 카테고리의 다른 글
[코딩테스트] 백준(BAEKJOON) - 거스름돈(Java, 5585번) (0) 2023.04.15 [코딩테스트] 백준(BAEKJOON) - 보물(Java, 1026번) (0) 2023.04.15 [코딩테스트] 백준(BAEKJOON) - 회의실 배정(Java, 1931번) (0) 2023.04.13 [코딩테스트] 백준(BAEKJOON) - 동전 0(Java, 11047번) (0) 2023.04.11 [코딩테스트] 백준(BAEKJOON) - ATM(Java, 11399번) (0) 2023.04.11