이번에는 구현 문제인 좋은 단어 문제를 풀어보았습니다.
문제를 푸는시간보다 문제를 이해하는 시간이 더 오래 걸린것 같은건 기분 탓이겠죠...
구현문제는 문제 파악이 젤 어려운거 같슴다...
구현 내용
구현 방법
이번 문제는 스택을 이용한다면 풀 수 있는 문제입니다.
가장 마지막에 들어온 값이 이번에 들어가는 값과 같다면 꺼내고 그렇지 않다면 스택에 담으면 됩니다.
자세한 방법은 주석을 통해 설명드리겠습니다.
↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 출력
int result = 0; //결과
StringTokenizer stok;
int n = Integer.parseInt(br.readLine()); //단어 개수
Stack<Character> s = new Stack<>(); //단어 담을 stack
for(int i=0;i<n;i++){
String line = br.readLine();
for(int j=0;j<line.length();j++){ //단어의 길이 만큼 반복
Character word = line.charAt(j); //띄워쓰기가 안되있기때문에
// charAt 사용
if(s.empty()){ //스택이 비었다면 스택에 추가
s.add(word);
continue;
}
if(word==s.peek()){ //가장 마지막에 들어갔던 값이
//이번에 들어갈 값과 같다면 꺼내기
s.pop();
}
else{
s.add(word); //마지막에 들어간 값과 다르다면
//스택에 추가
}
}
if(s.empty()){ //단어 끝까지 확인 후 스택이 비었다면
result++; //짝이 맞게 교차하지 않기때문에 좋은단어이다
}
s.clear(); //다음단어 확인 전 스택 클리어
}
bw.write(String.valueOf(result));
bw.flush();
}
}
'Study > CodingTest' 카테고리의 다른 글
[BOJ 17413] 단어 뒤집기 2 - JAVA (0) | 2022.09.09 |
---|---|
[BOJ 1966] 프린터 큐 - JAVA (0) | 2022.09.05 |
[BOJ 11000] 강의실 배정 - JAVA (0) | 2022.08.21 |
[BOJ 1946] 신입 사원 - JAVA (0) | 2022.08.12 |
[BOJ 1541] 잃어버린 괄호 - JAVA (0) | 2022.08.07 |