반응형
12-01 01:41
- Today
- Total
Link
개발하는 고라니
[백준] 4949번 : 균형잡힌 세상 본문
반응형
[문자열, Stack]
이 문제를 풀기 전 아스키 코드를 알면 좋다. 아스키 코드 표를 참고하면
'(' : 40
')' : 41
'[' : 91
']' : 93
위와 같다. 따라서 ')' - '(' = 1이고, ']' - '[' = 2이다. 이 규칙만 잘 활용하면 쉽게 풀 수 있다.
먼저 스택을 준비하는데, 동적의 크기를 갖는 컬렉션 또는 자료구조로 할 수 있지만, 배열로도 충분하기 때문에 배열로 스택을 구현해주었다. 그리고 타겟의 문자를 저장하는 배열을 따로 준비한다.
char[] stack = new char[100];
int top = -1;
//---
static char[] bracket = {'[', '(', ')', ']'};
이제 문자열을 받아 char[]로 변환 후 첫 글자가 '.'이면 종료하도록 하고, 각 문자가 위의 bracket에 해당하는 문자가 있으면 다음과 같은 로직을 수행한다.
for(char c:arr)
for(int a=0; a<4; a++)
if(c == bracket[a]) {
if (top != -1 && (c - stack[top] == 2 || c - stack[top] == 1))
--top;
else
stack[++top] = c;
}
stack에 가장 위의 있는 문자와 마이너스 연산을 했을 때 1 또는 2가 나오면 pop을 하도록 한다.
그게 아니라면 스택에 문자를 추가한다.
# Code </>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static char[] bracket = {'[', '(', ')', ']'};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true){
String origin = br.readLine();
char[] arr = origin.toCharArray();
if(arr[0] == '.') break;
int top = -1;
char[] stack = new char[100];
for(char c:arr)
for(int a=0; a<4; a++)
if(c == bracket[a]) {
if (top != -1 && (c - stack[top] == 2 || c - stack[top] == 1))
--top;
else
stack[++top] = c;
}
sb.append(top == -1? "yes":"no").append('\n');
}
System.out.println(sb);
}
}
반응형
'Programming > 백준' 카테고리의 다른 글
[백준] 6603번 : 로또 (0) | 2021.03.26 |
---|---|
[백준] 9935번 : 문자열 폭발 (0) | 2021.03.26 |
[백준] 14503번 : 로봇 청소기 (0) | 2021.03.26 |
[백준] 1094번 : 막대기 (0) | 2021.03.25 |
[백준] 16985번 : Maaaaaaaaaze (0) | 2021.03.25 |
Comments