Free Lines Arrow
본문 바로가기
Algorithm/프로그래머스 알고리즘

[프로그래머스] 쇠막대

by skahn1215 2021. 8. 10.
728x90
반응형

문제

 

분석

1. 처음에 어떻게 풀어야 할까 하다가 몇번 실패 후 다시 풀어 봤다.

2. 스택문제여서 스택을 이용하자

3. () 는 컷을 하는 기준이 이기 때문에 () = C 로 치환했다.

4. "(" 일 경우 stack push를 해주었다.

5. C 일경우 stack 의 사이즈를 더해준다.
- 이유는 ( ( C 일경우는 막대가 2개 들어 왔다 C 로 막대를 자르면 자른 지점 까지 기준으로 2개가 된다. 

6 ")" 닫힌 부분이 나오면 +1 을 해준다. 막대의 끝이기 때문에 다음과 같은 공식이 나온다
- 잘라진 부분 + 나머지 부분

 

 

구현

import java.util.*;


public class Main {
    public static void main (String[] args) {
         Scanner input = new Scanner(System.in);
         String str = input.next();
         str = str.replace("()","C");
         
         Stack<Character> stack = new Stack<>();
         
         int count = 0;
         
         for(int i = 0; i < str.length(); i++) {
             if (Character.compare(str.charAt(i), '(') == 0) {
                 stack.push(str.charAt(i));
             } else if (Character.compare(str.charAt(i), ')') == 0) {
                 stack.pop();
                 count++;
             } else {
                 count += stack.size();
             }
         }
         
         System.out.println(count);
    }
}

 

728x90
반응형

댓글