쇠막대기

Seungmin Lim·2022년 2월 12일
0

코딩문제연습

목록 보기
43/63

문제

나의풀이

import java.util.*;

class Main {
	public int solution(String str) {
			int answer = 0;
			char bf = ' ';
			Stack<Character> stack = new Stack<>();
			for(char x : str.toCharArray()) {
				if(x == '(') {
					bf = x;
					stack.push(x);
				}
				//x= 닫는괄호
				else {
					//lazer
					if(bf == '(') {
						bf = x;
						stack.pop();
						answer+=stack.size();
					}
					//쇠막대기 끝
					else {
						stack.pop();
						answer += 1;
					}
				}
			}
			return answer;
	}

		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
	}
	
}

index사용풀이

import java.util.*;

class Main {
	public int solution(String str) {
			int answer = 0;
			char bf = ' ';
			Stack<Character> stack = new Stack<>();
			for(int i=0; i<str.length(); i++) {
				if(str.charAt(i) == '(') stack.push(str.charAt(i));
				//x= 닫는괄호
				else {
					stack.pop();
					//lazer
					if(str.charAt(i-1) == '(') answer+=stack.size();
					//쇠막대기 끝
					else answer++;
				}
			}
			return answer;
	}

		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
	}
	
}

풀이방법

여는괄호'(' 를 만나면 무조건 stack에 넣고,

닫는괄호')' 를 만나면 바로 전 문자와 비교해,

바로 전 문자가 '('면 레이저이므로 stack에서 한개를 pop하고 남은 stack의 size만큼 answer에 더해주면된다.

바로 전 문자가 ')'면 쇠막대기의 끝부분이므로 answer에 +1만 해주면된다.

++ 개인적으로 index를 사용한편이 훨씬 낫다고 본다...
이전값을 계속 저장해줘야하는 귀찮음이 있기때문에..

핵심키워드

이런 풀이방법은 들으면 간단하지만 생각해 낼수있냐 없냐가 실력의 차이라고 생각한다.
괄호를 이용한 문제는 대부분 stack을 이용한다고 생각하자!

0개의 댓글