Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 클래스 변수
- 초기화 순서
- stateful widget
- 운영체제의 목적
- 인스턴스 메서드
- stateless widget
- 객체 배열
- object클래스
- stateful widget 생명주기
- 참조형 반환타입
- webview_flutter
- 참조형 매개변수
- PriorityQueue
- 명예의전당(1)
- 운영체제의 예
- static 메서드
- 운영체제란 무엇인가
- 기본형 매개변수
- 오버라이딩과 오버로딩 차이점
- this()
- 운영체제의 구조
- 오버로딩
- 운영체제의 분류
- 조상의 생성자
- static import문
- this()와 참조변수 this 차이점
- 이것이코딩테스트다
- 프로그래머스
- FLUTTER
- 호출스택
Archives
- Today
- Total
Coram Deo
[백준 Java] 9012. 괄호 본문
Stack 관련 예제
이 문제를 풀면서 한참동안 원하는 결과가 나오지않아 고민했다.
- 원인
- 문제의 원인은 테스트케이스를 실행한 후 그 다음 테스트케이스를 시작할 때, stack을 비우지 않았던 점이었다.
위의 예제입력에서 세번째줄이 계속해서 YES가 아닌 NO가 나왔다.
그런데 세번째줄만 단독으로 실행했을때는 YES가 잘 나왔다.
디버깅을 계속했는데도 처음에 원인을 몰랐던 이유는 세번째줄의 초기 rightCount값과 leftCount값이 예상한 결과대로 출력되어 뒤에도 맞았겠거니 넘겼던 게 화근이었다.
- 배운점
- 앞으로는 초기화할때 stack도 비우자 ㅎㅎ
- * stack.clear() - stack 비우는 메서드
- 덕분에 인텔리제이에서 디버깅하는 법에 익숙해졌다.
- 중단점 잡고 변수값 확인하기 !
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
Stack<Character> stack = new Stack<>();
String[] inputs = new String[t];
int rightCount;
int leftCount;
String result;
for(int k=0; k<t; k++) {
inputs[k] = br.readLine();
}
for (int i = 0; i < t; i++) {
// 테스트 케이스마다 모든 변수를 초기화 해줘야 함.
// stack 초기화 안해서 디버깅 엄청 오래걸림.
rightCount = 0;
leftCount = 0;
result = "YES";
stack.clear();
for(int j=0; j<inputs[i].length(); j++) {
stack.push(inputs[i].charAt(j));
}
while (!stack.isEmpty()) {
if (stack.peek()==')') {
stack.pop();
leftCount++;
} else if(stack.peek()=='(') {
stack.pop();
rightCount++;
if (leftCount < rightCount) {
result = "NO";
break;
} else {
leftCount--;
rightCount--;
}
}
}
if(leftCount!=0 && rightCount==0) {result = "NO";}
System.out.println(result);
}
}
}
'알고리즘 공부' 카테고리의 다른 글
[백준] 1427. 소트인사이드 (0) | 2024.06.24 |
---|---|
[프로그래머스] - 명예의 전당 (1) (LinkedList 사용) (0) | 2024.06.18 |
[Java 에러] char cannot be dereferenced (0) | 2023.11.22 |
Java - 문자열 한 글자씩 분리하기 (0) | 2023.10.03 |
자바 - 스트림(Stream) (0) | 2023.05.29 |