[알고리즘]/백준

백준 10799 자바 - 쇠막대기

broship 2021. 6. 19. 14:48

문제


 

 

 

문제해결1


import java.util.Scanner;

public class B10799 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.next();
        int n = 0;//놓여진 쇠막대기 개수
        int cnt = 0;//총 쇠막대기 개수

        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i)=='('){//여는 괄호일때
                if (input.charAt(i+1)!=')'){//레이저가 아닐때
                    n++;//놓여진 쇠막대기 +1
                    cnt++;//총 쇠막대기 +1
                } else {//바로 닫는 괄호를 만나면 레이저
                    cnt += n;//놓여진 쇠막대기 만큼 +
                    i++;//다음 괄호 스킵
                }
            } else {//닫는 괄호 일때
                n--;//놓여진 쇠막대기 하나가 치워지는걸 의미
            }
        }
        System.out.println(cnt);
    }
}

- () : 레이저, 놓여진 쇠막대기 만큼 cnt에 추가

- ( : 놓여진 쇠막대기 하나 추가, cnt에도 하나 추가

- ) : 놓여진 쇠막대기 하나 빼기

- 문자열 하나하나 반복문으로 돌면서 조건에 맞는 처리를 해주면 된다

 

문제해결2 - stack 사용


import java.util.Scanner;
import java.util.Stack;

public class B10799_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.next();
        Stack<Character> stack = new Stack<>();//놓여진 쇠막대기 개수
        int cnt = 0;//총 쇠막대기 개수

        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i)=='('){//여는 괄호일때 쇠막대기 추가
                stack.push('(');
            } else {//닫는 괄호일때
                stack.pop();//우선 하나 꺼냄
                if (input.charAt(i-1)=='(')//레이저일때
                    cnt += stack.size();//쇠막대기 만큼 추가
                else//그냥 닫는 괄호일때
                    cnt++;//총 개수 +1
            }
        }
        System.out.println(cnt);
    }
}

- 스텍을 사용해서도 문제를 풀 수 있다

- ( 일때는 무조건 stack에 push

- ) 일때

1. 그 전께 ( 일 경우 레이저 이므로 스텍 개수만큼 cnt에 추가

2. ( 가 아닐 경우 그냥 닫는 괄호이므로 놓여진 쇠막대기 하나 치우고 cnt +1

'[알고리즘] > 백준' 카테고리의 다른 글

백준 17299 자바 - 오등큰수  (0) 2021.06.21
백준 17298 자바 - 오큰수  (0) 2021.06.20
백준 17413 자바 - 단어 뒤집기2  (0) 2021.06.18
백준 10866 자바 - 덱  (0) 2021.06.18
백준 1158 자바 - 요세푸스 문제  (0) 2021.06.17