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
- 백준 16935
- 프로그래머스
- dfs
- 스프링 에러
- 리트코드
- 인텔리제이 에러
- 스택
- 파이썬
- 리트코드 자바
- java leetcode
- 코딩테스트
- Java
- 코테
- leetcode 1721
- 분할정복
- 리트코드 1557
- 구현
- 백준 18222
- 그래프 자바
- DP
- 카카오
- 자바 5464
- 백준
- java 프로그래머스
- 자바
- BFS
- 자바 리트코드
- leetcode
- daily challenge
- 프로그래머스 java
Archives
- Today
- Total
레벨업 일지
[Java] 백준 10799 쇠막대기 본문
문제
https://www.acmicpc.net/problem/10799
풀이
문제가 '(' 와 ')' 기호 의 콤비내이션으로 이루어져있어 스택 알고리즘 으로 접근하는게 편하다 생각들었다.
문제를 해석하면 () 는 레이저 광선을 의미하고 (( .. )) 처럼 열림-닫힘 쌍이 아닌 것들은 쇠 막대기이다.
따라서 레이저가 한번 지잉 하면, 쇠막대기 개수만큼 정답 변수에 누적합을 하면 된다.
풀이 알고리즘은 다음과 같다.
- 현재 기호가 ( 이면 stack +1 .
- 현재 기호가 ) 이면 stack -=1 적용하고 다음과 같다.
- 현재 인덱스 i 에서 i-1 번째가 ( 기호이면 쇠막대기 만큼 더한다.
- 현재 인덱스 i 에서 i-1번째가 ) 기호이면, 쇠막대기가 감소하는 것임으로 +1 을 한다.
- 정답을 리턴한다.
코드
import java.io.*;
import java.util.*;
public class Main {
BufferedWriter bw;
public static void main(String args[]) throws IOException {
Main m = new Main();
m.solution();
}
public void solution() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
int stack =0;
int ans =0;
char[] charArr = str.toCharArray();
for(int i =0 ;i < charArr.length; i++){
if(charArr[i] == '(')
stack++;
else if(charArr[i] == ')'){
stack--;
if(charArr[i-1] == '('){
ans +=stack;
}else{
ans ++;
}
}
}
bw.write(Integer.toString(ans));
bw.close();
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 17829 222-풀링 (0) | 2023.07.04 |
---|---|
[Java] 백준 16935 배열 돌리기 3 (0) | 2023.06.29 |
[Java] 백준 5464.주차장 (0) | 2023.06.27 |
[Java] 백준 1992. 쿼드트리 (0) | 2023.06.27 |
[Java] 백준 2573.빙산 (0) | 2023.05.15 |
Comments