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 |
Tags
- 연속부분수열
- 배열
- 점수계산
- 아스키코드
- GitHub #Commit #BaekJoon
- 등수구하기
- 알고리즘
- 큰 수 출력하기
- 뒤집은 소수
- 코테준비
- array
- 보이는 학생
- 공통원소 구하기
- 10991
- 백준
- 10992
- 모든행과열대각선의합
- java
- 최대 길이
- 자바
- 인프런
- 투 포인터
- 격자판
- 두 배열 합치기
- 누적 계산
- 임시반장 정하기
- 가장 짧은 문자거리
- Two Pointer
- Pointer
- ArrayList
Archives
- Today
- Total
ezhoon
[인프런] 05_02 괄호문자제거 본문
📖 문제
- 첫 줄에 문자열 입력
- 소괄호 사이에 존재하는 모든 문자 제거하고 남은 문자만 출력하시오

⚠️ 주의사항
- '(' 괄호가 여러 개 나오고서 ')' 괄호 나올 때를 생각해야 합니다.
- 괄호 사이가 아닌 경우에는 그대로 stack에 유지하거나 다른 변수에 저장해야 합니다.
✍️ 이해
이번엔 두 가지로 나눴습니다.
먼저 제가 처음에 풀었던 방법이지만 비추하는 방법입니다. 코드로 풀어보면 너무 길고, 직관적이지가 않습니다.
/**
* 1. 첫 줄에 문자열 str 생성
* 2. 소괄호 사이에 존재하는 모든 문자 제거이므로 "(" 입력 받으면 ")" 받을 때 까지 모든 문자 제거
* 2-1. "(" 다음 "(" 더 들어오고 ")" 여러 개 있는 경우도 생각하므로
* 2-2. "(" 받을 때 마다 cnt++ 하고 ")"도 cnt2 누적 후 동일 할 때 문자 삭제
* 2-3. 위에 조건문 빠져나올때마다 문자 answer에 누적
* 3. return answer;
*/
위에 코드의 단점을 보완한 풀이 방법입니다.
/**
* 1. 첫 줄에 문자열 str 생성
* 2. 문자열 stack 추가
* 2-1. 문자열이 ')' 인 경우
* 2-1-1. '(' 여는 괄호 만날때 까지 pop
* 2-2. 알파벳인경우 push
* 3. for each 구문으로 answer에 stack 값 누적
* 4. return answer
*/
✏️ 풀이
따로 찾아보지 않고 풀어본 방법이지만 for문 안의 if문이 너무 쓸데없이 많은 것 같아 아래에 보완 코드가 있습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Java05_02 {
public String solution(String str) {
String answer = "";
Stack<Character> stack = new Stack<>();
int cnt = 0, cnt2= 0;
for (char c : str.toCharArray()) {
if(c == '('){
cnt++;
} else if (c == ')') {
cnt2++;
if (cnt == cnt2 && cnt2 != 0) {
cnt = 0;
cnt2 = 0;
}
} else {
if( cnt == 0) answer = answer + c;
stack.push(c);
}
}
return answer;
}
public static void main(String[] args) throws IOException {
Java05_02 T = new Java05_02();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(T.solution(str));
}
}
단점 보완코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public String solution(String str) {
String answer = "";
Stack<Character> stack = new Stack<>();
for (char x : str.toCharArray()) {
if (x == ')') { // 닫는 괄호 만날 경우 아래 실행
while (stack.pop() != '('); // 여는괄호 '(' 만날때까지 스택의 마지막값 제거
}
else stack.push(x); // 알파벳인 경우 스택에 추가
}
for (Character character : stack) answer += character;
return answer;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(T.solution(str));
}
}
'[Java] 인프런 문제풀이 > Stack, Queue (자료구조)' 카테고리의 다른 글
[인프런] 05_07 교육과정 설계 (0) | 2022.01.31 |
---|---|
[인프런] 05_06 공주 구하기 (0) | 2022.01.30 |
[인프런] 05_05 쇠막대기 (0) | 2022.01.29 |
[인프런] 05_04 후위식 연산 (0) | 2022.01.28 |
[인프런] 05_01 올바른 괄호 (0) | 2022.01.26 |