[프로그래머스] 쇠막대기(java)

박현우·2020년 7월 26일
0

프로그래머스

목록 보기
7/34

문제

쇠막대기

문제풀이

간단한 문제이다. ()를 만나면 레이저를 발사하는데, 레이저는 지금껏 쌓여있는 쇠막대기를 모두 관통한다. 솔직히 괄호만 보면 스택을 써야 한다는 고정관념에 스택을 사용했으나, 굳이 스택을 사용할 필요가 없는 문제이다. 대신 주어진 String을 스택에 넣는다고 가정 하였을 때, 쉽게 풀수 있는 문제이다. 바로전에 비교했던 기호를 저장할 필요가 있다.
1. String을 스택에 넣는다.
2. 하나씩 꺼내면서 어떤 기호인지 확인한다.
3. )를 만나면 막대기 개수를 1개 더해주고 (를 만나면 막대기 개수를 -1 해준다.
4. 바로전에 비교했던 기호와 합쳐 "((" 이면 답에 1을 더해주고 막대기 제거, "()" 이면 답에 현재 막대기 개수를 더해주고 막대기 제거.

프로그램 코드

import java.util.*;
class Solution {
    public int solution(String arrangement) {
        int answer = 0;
        Stack<Character> s = new Stack<Character>();
		int cnt = 0;
		char last = ' ';

		for (int i = 0; i < arrangement.length(); i++) {
			s.push(arrangement.charAt(i));
		}

		while (!s.isEmpty()) { // 스택이 빌때까지
			char now = s.pop();
			if (last == ')' && now == '(') { // 레이저
				cnt--;
				answer += cnt;
			} else if (last == '(' && now == '(') { // 막대기 하나 종료
				cnt--;
				answer += 1;
			}
			else if(now == ')') cnt++;
			
			last = now;
		}
        return answer;
    }
}

0개의 댓글