문제
- 입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
입력
- 첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
출력
- 남은 문자만 출력한다.
입출력 예제
풀이방식
이번 문제는 Stack 을 사용하여 푸는 문제이다.
설계과정
1. ' ) ' 가 아니면 전부 스택에 넣는다.
2. ' ) ' 가 입력되면 ' ( ' 를 만날 때까지 스택에 있는 모든 값을 제거한다.
3. 스택에 남아있는 값들을 출력한다.
풀이과정
1. 값들을 입력받는 코드를 작성한다.
2. String 형으로 메소드를 작성한다.
3. 결과값을 출력할 result와 Stack을 선언한다.
- result 는 YES로 초기값을 설정한다.
4. toCharArray() 를 사용해서 입력받은 문자열을 하나의 문자로 쪼개서 비교한다.
- toCharArray() : 입력된 문자열을 문자 하나씩 분리해서 문자 배열을 생성함
- char x : 하나씩 쪼갠 문자열을 담는 변수
5. x가 ' ) ' 면 ' ( ' 를 입력받을 때까지 스택에 있는 값들을 제거한다.
- pop() : 스택에 값을 추가한다.
6. x가 ' ) ' 가 아니면 스택에 값을 넣는다.
- push() : 스택에 값을 추가한다.
7. 스택의 크기만큼 돌면서 스택에 있는 값들을 출력한다.
- size() : 스택에 남아있는 원소의 크기
- get() : 스택의 가장 최근 값을 가져온다.
- 아래 그림을 통해 자세히 이해해보자.
입력값 : (A(BC)D)EF(G(H)(IJ)K)LM(N)
1) 처음 ' ) ' 가 입력되기 전까지 모든 값을 스택에 넣는다.
2) ' ) ' 가 입력되었으므로 while문을 통해 스택에서 ' ( ' 값을 찾을 때까지 모든 값을 제거한다.
3) ' ) ' 가 입력되기 전까지 모든 값을 스택에 넣는다.
4) ' ) ' 가 입력되었으므로 while문을 통해 스택에서 ' ( ' 값을 찾을 때까지 모든 값을 제거한다.
5) ' ) ' 가 입력되기 전까지 모든 값을 스택에 넣는다.
6) ' ) ' 가 입력되었으므로 while문을 통해 스택에서 ' ( ' 값을 찾을 때까지 모든 값을 제거한다.
7) 위 과정을 반복하면 아래와 같은 결과가 나온다.
8) result에 순차적으로 값을 넣었으므로 ' EFLM ' 이라는 결과가 나온다.
해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.
'알고리즘 > 인프런' 카테고리의 다른 글
섹션 5. Stack, Queue(자료구조) 4. 후위식 연산(postfix) (0) | 2022.10.21 |
---|---|
섹션 5. Stack, Queue(자료구조) 3. 크레인 인형뽑기(카카오) (0) | 2022.10.21 |
섹션 5. Stack, Queue(자료구조) 1. 올바른 괄호 (0) | 2022.10.18 |
섹션 4. HashMap, TreeSet (해쉬, 정렬지원 Set) 5. K번째 큰 수 (0) | 2022.10.14 |
섹션 4. HashMap, TreeSet (해쉬, 정렬지원 Set) 4. 모든 아나그램 찾기 (0) | 2022.10.13 |