본문 바로가기

알고리즘/인프런

섹션 5. Stack, Queue(자료구조) 2. 괄호문자제거

문제

  • 입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.

입력

  • 첫 줄에 문자열이 주어진다. 문자열의 길이는 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) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.