괄호문자 제거
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성
■ 문제 풀이
1) 입력 설명
- 첫 줄에 문자열이 주어진다.
- 문자열의 길이는 100을 넘지 않는다.
2) 출력 설명
- ( ) 소괄호 사이에 존재하는 문자가 제거된 남은 문자만 출력한다.
3) 테스트
- input : (A(BC)D)EF(G(H)(IJ)K)LM(N)
- output : EFLM
4) 문제풀이
- 첫번째 solution의 경우, 닫는 괄호가 아닌 경우에는 모두 stack에 담고 닫는 괄호인 경우 여는 괄호가 나올때까지 Stack에 쌓여있는 값들을 모두 꺼내서 최종적으로 stack에 저장된 값들을 출력
- 두번째 solution의 경우, 여는 괄호일 경우 stack에 저장하고 닫는 괄호가 나오면 stack에서 값을 pop()한다. stack이 비어있고, 닫는 괄호가 아닌 경우가 소괄호 사이의 값들이 아닌것으로 판단하여 그 값들을 Stringbuffer에 append 하여 출력
import java.util.Scanner;
import java.util.Stack;
public class Main {
/**
* 첫번째 solution
*/
public static String solution(String input) {
StringBuffer sb = new StringBuffer();
Stack<Character> stack = new Stack<>();
for (char c : input.toCharArray()) {
if (c == ')') {
while (stack.pop() != '(') ;
} else stack.push(c);
}
for (char c : stack) {
sb.append(c);
}
return sb.toString();
}
/**
* 두번째 solution
*/
public static String solution2(String input) {
Stack<Character> stack = new Stack<>();
StringBuffer sb = new StringBuffer();
for (char c : input.toCharArray()) {
if (c == '(') {
stack.push(c);
} else if (c == ')') {
stack.pop();
}
if (stack.isEmpty() && c != ')') {
sb.append(c);
}
}
return sb.toString();
}
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().trim();
System.out.println(solution(input));
System.out.println(solution2(input));
}
}
'CodingTest Practice' 카테고리의 다른 글
[인프런] 아나그램 (0) | 2022.04.27 |
---|---|
[인프런] 학급 회장 (0) | 2022.04.26 |
[인프런] 이진수 출력 (0) | 2022.04.22 |
[인프런] 재귀함수 (0) | 2022.04.22 |
[인프런] 뒤집은 소수 (0) | 2022.04.21 |