[간단 문제 설명]
괄호만으로 이루어진 문자열이 주어진다.
괄호의 쌍이 올바르게 위치하면 "YES"를 출력, 쌍이 올바르지 않으면 "NO"를 출력한다.
솔루션 코드는 아래와 같다. ↴
public String solution(String pth){
Stack<Character> checkP=new Stack<>();
for(char x:pth.toCharArray()){
if(x=='(')checkP.push(x);
else if(checkP.isEmpty()||checkP.pop()!='(') return "NO"; //X==')'일 경우 실행되는 구문
}
if(!checkP.isEmpty()) return "NO"; //짝지어지지 못하고 남는 괄호가 있는경우
return "YES";
}
이번같은 괄호 문제는 stack의 LIFO(후입선출) 특징을 이용하면 수월하게 해결가능하다.
문제 해결을 위해 기본적으로 기억해야할 내용:
- 기본적으로 '(' 는 스택에 넣고, ')'는 스택 TOP 요소를 pop하여 비교한다.
- 문자열이 ')'로 시작하는 경우가 있다. 이 경우 .pop() 메서드를 실행하면 오류가 발생하기 때문에 .isEmpty()를 통해 스택이 비어있는지 꼭! 확인한다.
- 서로 짝지어지지 못하고 남는 괄호가 있을 수 있다. 따라서 마지막에 남은 괄호가 있는지 !.isEmpty()를 통해 확인하자.
이번 문제는 2번, 3번 경우를 간과하는 바람에 특정 상황에서 계속 오류가 발생했다.
내가 작성한 코드가 예외 처리를 하고 있는지, 미처 생각하지 못한 예외상황이 있는지에 대해서도 많이 고민해보자.
'프로그래밍 > JAVA 프로그래밍' 카테고리의 다른 글
[코딩연습_JAVA] 크레인 인형뽑기 (0) | 2024.03.01 |
---|---|
[코딩연습_JAVA] 괄호 문자 제거 (0) | 2024.02.20 |
[코딩연습_JAVA] K번째 큰 수 (0) | 2024.02.14 |
[코딩연습_JAVA] 학급 회장(Hash) (24.02.12) (0) | 2024.02.13 |
[코딩연습_JAVA] 연속 부분수열 (1) | 2024.02.06 |