Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 백준 4358 자바
- 깃 연동
- 리액트 네이티브
- 리액트 네이티브 프로젝트 생성
- 모두의 네트워크
- 백준 4358번
- 백준 5525번
- 깃허브 토큰 인증
- 문자열
- 리액트 네이티브 시작하기
- 모두를위한딥러닝
- 딥러닝
- 깃허브 로그인
- 네트워크
- 팀플회고
- 모두를 위한 딥러닝
- 데이터베이스
- React Native
- 머신러닝
- 데베
- SQL
- 백준 4949번
- HTTP
- 백준
- 지네릭스
- 자바
- 스터디
- 모두의네트워크
- 깃 터미널 연동
- 정리
Archives
- Today
- Total
솜이의 데브로그
백준 24552번 ) 올바른 괄호 (java) 본문
https://www.acmicpc.net/problem/24552
문제
풀이
누적합으로 푸는 문제라고 하는데, 나는 배열로 저장하지는 않고 int 에서 +, -로 풀었다.
먼저 입력받은 문자열에서 총 여는 괄호와 닫는 괄호의 개수를 확인한다.
둘 중 어떤 괄호의 개수가 더 많은지 확인 후, ( 괄호의 개수가 많을 경우 왼쪽에서부터 확인하면서 올바른 괄호가 완성된 이후부터 ( 개수를 count 해서 출력한다.
) 괄호의 개수가 많은 경우, 반대로 오른쪽부터 확인하면서 올바른 괄호가 완성된 이후부터 ) 의 개수를 count 한다. (이 중 어느 괄호를 삭제해도 올바른 괄호가 완성되기 때문!)
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int left=0, right=0, sum=0;
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == '('){
left++;
} else{
right++;
}
}
if(left>right){
left = 0;
right = 0;
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == '(') left++;
else right++;
if(left == right){
left = 0;
right = 0;
}
}
System.out.println(left);
}
else {
left = 0;
right = 0;
for(int i= s.length()-1; i>=0; i--){
if(s.charAt(i) == '(') left++;
else right++;
if(left == right){
left = 0;
right = 0;
}
}
System.out.println(right);
}
}
}
풀면서 생각보다 단순한 문제이나, 어떤 방식으로 사고해서 풀어야하는지 찬찬히 생각해야함이 어려웠다.
특히 ')' 괄호의 경우 오른쪽부터 확인해야함을 잘 알아두자! (왼쪽부터 카운트하면 올바른 괄호로 잘못 카운트할 수 있음.)
'Algorithm > 백준' 카테고리의 다른 글
백준 17298번 ) 오큰수 (java) (0) | 2022.05.27 |
---|---|
백준 7576번 ) 토마토 (java) (0) | 2022.03.17 |
백준 2847번 ) 게임을 만든 동준이 (java) (0) | 2022.03.15 |
백준 1158번 ) 요세푸스 문제 (java) (0) | 2022.03.15 |
백준 2178번 ) 미로 탐색 (java) (0) | 2022.03.11 |