인프런 커뮤니티 질문&답변

전채연님의 프로필 이미지

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

5. 쇠막대기

알려주신 peek메서드를 사용해서 풀 수는 없나요?

작성

·

445

0

import java.util.*;

// ()(((()())(())()))(())     -> 17
// (((()(()()))(())()))(()()) -> 24
class Main {
	public Integer solution(String str) {
		int answer = 0;
		Stack<Character> stack = new Stack<>();

		for(char x : str.toCharArray()) {
			if(x=='(') {
				stack.push(x);
			} else {
				if(stack.peek()=='(') {
					stack.pop();
					answer+=stack.size();
				} else {
					stack.pop();
					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));
	}
}
 
이런식으로 짜봤는데
첫번째 입력은 올바르게 출력되는데
두번째 입력은 잘못출력됩니다.
아무리 생각해도 뭐가 잘못됐는디 모르겠습니다.
어느 부분이 잘못 된건가요?

답변 2

0

제 생각이지만  스택에는 항상 열린괄호가 들어가있어서

stack.peek()=='("는 의미없는? 코드이고 

else 내부의 else는 동작하지 않습니다.

그래서 강사님 코드가 포이치문이 아닌 일반 반복문으로 사용하신 이유가

배열인덱스를 조회하기 위해서 쓰신게 아닌가 싶네요!

전채연님의 프로필 이미지
전채연
질문자

답변보고 로직을 보니까 이해가 되네요 감사합니당

0

저도 이렇게 풀었는데 뭐가 문젠지 모르겠네요..