반응형
250x250
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
- 백준 1935
- mvvm패턴
- Class Loader
- 포워드 프록시
- SOLID원칙
- removeAll
- 자바의 면접
- 리버스 프록시
- 팩토리 패턴
- 백준 2164
- @Tranctional
- try-catch
- 팩토리패턴
- 스프링 빈
- TCP/IP 4계층
- 후위표기식
- k번째큰수
- 기본형 매개변수
- www.naver.com치면 발생하는일
- 싱글톤 패턴
- 옵저버 패턴
- 네트워크
- 참조형 반환타입
- 스프링 컨테이너
- 빈 타입 조회
- 참조형 매개변수
- 전략 패턴
- 스프링
- 스프링 싱글톤
- 쇠막대기
Archives
- Today
- Total
스파이더 웹 개발
쇠막대기 - Stack 본문
728x90
반응형
Stack을 활용한 문제이다(괄호문제가 나온다면 stack을 고려해보자)
괄호안에서 쇠막대기와 레이져를 구분을 해야 문제를 해결하는게 팁이다.
주어진 문제에 예시 이미지를 보면 레이져의 경우 닫힌괄호( " ) " )가 나오면 바로 직전 문자의 경우가 열린 괄호가 나온다
( " ( " )
또한 레이져가 한번 실행되면 나무막대가 잘리면서 좌측의 나무막대의 갯수가 나오는데 해당 내용을 활용하여 답을 구하면 된다
마지막으로 쇠막대기의 끝 부분 닫힌 괄호를 만나면 해당 괄호에 해당하는 열린괄호를 pop해주면된다
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static int solution(String str){
int answer =0;
Stack<Character> st = new Stack<>();
char[] c = str.toCharArray();
for(int i=0; i<str.length(); i++){
if(c[i]=='('){ //열린괄호를 만나면 push 해준다
st.push(c[i]);
}else {
st.pop(); //레이져와 쇠막대기 상관없이 stack에서 끄내준다 닫힌괄호와 매핑되는
// 열린괄호를 stack에서 없애야 잘린막대기의 수를 구할수있다
if(c[i-1]=='('){ //레이져인경우
answer+=st.size(); //레이져인경우 쇠막대기가 잘렸으모로 남은 스택의 사이즈만큼 더해주면된다
}else {
answer++;
}
}
}
return answer;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(solution(str));
}
}
결과
17
728x90
반응형
'알고리즘' 카테고리의 다른 글
공주 구하기 (0) | 2022.07.28 |
---|---|
백준 1935 - 후위 표기식 (0) | 2022.07.27 |
백준 2164 (0) | 2022.07.22 |
K번째 큰 수 (0) | 2022.07.21 |
백준 2941 - 크로아티 알파벳 (0) | 2022.07.20 |
Comments