이 글은 인프런 [자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 ] 강의를 수강하며 작성한 글입니다.
자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 - 인프런 | 강의
자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성
www.inflearn.com
문제 :
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
▣ 입력설명 첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
▣ 출력설명 남은 문자만 출력한다.
▣ 입력예제 1
(A(BC)D)EF(G(H)(IJ)K)LM(N)
▣ 출력예제 1
EFLM
이번 문제는 강의에서의 풀이와 조금 다르게 풀어보았다.
저번 게시글의 '올바른 괄호' 문제
2021.12.31 - [알고리즘/자바 알고리즘 문제풀이: 코딩테스트 대비] - [알고리즘/java] Stack 스택 (자료구조) / 올바른 괄호 를 조금만 변형시키면 간단하게 풀 수 있다.
(A(BC)D)EF(G(H)(IJ)K)LM(N)
소괄호 사이라는 것은 곧 올바른 괄호의 사이를 의미하기 때문에 , 괄호의 쌍이 다 맞춰진 상태 뒤에 나오는 문자들을 출력하면 되는 것이다.
(A(BC)D)EF(G(H)(IJ)K)LM(N)
예시로 위의 빨간 글자까지는 올바른 괄호로, 현재 스택에 남은 괄호가 없이 짝이 지어졌기 때문에 다음 괄호가 나올때까지의 문자들은 출력하면 된다.
-> (A(BC)D)EF(G(H)(IJ)K)LM(N)
(A(BC)D)EF(G(H)(IJ)K)LM(N)
그 다음 여는 괄호가 나오고, 또 다시 스택에 남은 거짝이 완벽히 이루어진 끝점을 찾아 그 뒤의 문자를 출력한다.
->(A(BC)D)EF(G(H)(IJ)K)LM(N)
< 괄호문자제거 전체코드 >
public class 스택_괄호문자제거 {
private static String answer = "";
public static void checkingStr(String str) {
Stack<Character> stack = new Stack<>();
for (char ch : str.toCharArray()) {
if (ch == '(') { // 여는 괄호면 스택에 push
stack.push(ch);
} else if (ch == ')') { // 닫는 괄호일 경우
if (stack.isEmpty()) { // 스택이 비어있으면 짝이 될 수 없음.
return;
}
stack.pop(); // 스택이 비어있지 않다면 여는 괄호 pop
} else {
if (stack.isEmpty()) { // 올바른 괄호쌍 뒤 문자
answer += ch;
}
}
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
checkingStr(str);
System.out.println(answer);
scan.close();
}
}
'알고리즘 > 자바 알고리즘 문제풀이: 코딩테스트 대비' 카테고리의 다른 글
[알고리즘/java] Greedy Algorithm 그리디 알고리즘 / 씨름 선수 (0) | 2022.01.10 |
---|---|
[알고리즘/java] Stack 스택 (자료구조) / 올바른 괄호 (0) | 2021.12.31 |
[알고리즘/java] DFS 활용 / 바둑이 승차 (0) | 2021.12.28 |
[알고리즘/java] DFS 활용 / 합이 같은 부분집합 (0) | 2021.12.27 |
[알고리즘/java] 그래프 최단거리(BFS 인접리스트) (0) | 2021.12.22 |