SW Expert Academy - 1234번(비밀번호)

최지홍·2022년 2월 26일
0

SW Expert Academy

목록 보기
28/36

문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14_DEKAJcCFAYD


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;

public class Solution {

	public static void main(String[] args) throws IOException {
		StringBuilder sb = new StringBuilder();
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		for (int i = 0; i < 10; i++) {
			StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
			int N = Integer.parseInt(tokenizer.nextToken());
			
			ArrayDeque<Character> stack = new ArrayDeque<>();
			
			char[] temp = tokenizer.nextToken().toCharArray();
			stack.push(temp[0]);
			
			for (int j = 1, size = temp.length; j < size; j++) {
				if (!stack.isEmpty() && stack.peek() == temp[j]) stack.pop();
				else stack.push(temp[j]);
			}
			
			sb.append("#").append(i + 1).append(" ");
			while (!stack.isEmpty()) sb.append(stack.pollLast());
			sb.append("\n");
		}
		
		System.out.println(sb);
	}

}

  • 처음에 배열을 탐색해서 해결하려 하였으나 친구가 "스택"을 사용해서 풀면 될 것 같다고 하여 이를 이용하여 해결하였다.
  • 스택을 이용하니 간단히 해결할 수 있었다. 아직 이런 직관이 부족한 것 같아 이를 연습해야겠다.
  • ArrayDeque를 사용했는데 이 자료구조의 동작방식이 특이하였다.
import java.io.IOException;
import java.util.ArrayDeque;

public class Main {

    public static void main(String[] args) throws IOException {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();

        arrayDeque.push(1);
        arrayDeque.push(2);
        arrayDeque.push(3);

        System.out.println(arrayDeque);

        arrayDeque.clear();

        arrayDeque.offer(1);
        arrayDeque.offer(2);
        arrayDeque.offer(3);

        System.out.println(arrayDeque);
    }

}
  • 이렇게 코드를 돌렸을 때
  • 이 그림처럼 결과가 나왔다. Stack처럼 push 연산을 할 경우 왼쪽에 삽입한다.
  • Queue처럼 offer 연산을 하면 오른쪽에 삽입한다.
  • 이러한 특징에 따라 pop() 연산과 poll() 연산을 할 때 주의가 필요할 것 같다. pop()과 poll() 모두 왼쪽 끝의 원소를 가져온다. push()로 넣은 값들을 차례대로 가져올 경우, pollLast()를 이용하자.
profile
백엔드 개발자가 되자!

0개의 댓글