[Hackerrank 문제 풀이] Queues and Stacks

Junu Kim·2025년 11월 21일
0
post-thumbnail

[Queue&Stack] Queues and Stacks

난이도: ★☆☆☆☆ • solved on: 2025-11-21


문제 요약

  • 문제 유형: 자료구조(Queue, Stack), 문자열 검사
  • 요구사항:
    주어진 문자열이 palindrome(회문)인지 확인하기 위해
    Stack에는 앞에서부터 문자 push, Queue에는 뒤에서부터 문자 enqueue 하여
    pop/dequeue 결과가 동일한지 검사한다.

사용 개념

  1. 자료구조

    • Stack: LIFO 구조를 적용하기 위해 ArrayDequepush/pop 사용
    • Queue: FIFO 구조를 위해 ArrayDequeadd/poll 사용
  2. 알고리즘/기법

    • 투 포인터 대신 스택과 큐의 대조 방식 사용
    • 문자열 순회 후 스택 pop과 큐 poll 결과 비교
  3. 핵심 키워드

    • LIFO, FIFO
    • 자료구조 구현
    • palindrome 검사

풀이 아이디어

  1. 문제 분해
  • 문자열의 각 문자를 stack과 queue에 각각 push/enqueue 한다.
  • stack은 뒤에서부터, queue는 앞에서부터 문자를 꺼내므로
    두 자료구조에서 나온 문자를 매번 비교하면 palindrome 여부를 판단할 수 있다.
  1. 핵심 로직 흐름

    for each char in s:
        pushCharacter(c)    // stack.push
        enqueueCharacter(c) // queue.add
    
    repeat n/2:
        if popCharacter() != dequeueCharacter():
            not palindrome
  2. 예외 처리

    • 문자열 길이가 1 또는 0인 경우 무조건 palindrome 처리 (하지만 이번 문제에서는 생각할 필요가 없었다)

코드

public class Solution {
    // Write your code here.
    public Deque<Character> stack;
    public Queue<Character> queue;
    
    public Solution(){
        this.stack = new ArrayDeque<>();
        this.queue = new ArrayDeque<>();
    }
    
    public void pushCharacter(char ch){
        stack.push(ch);
    }
    public void enqueueCharacter(char ch){
        queue.add(ch);
    }
    public char popCharacter(){
        return stack.pop();
    }
    
    public char dequeueCharacter(){
        return queue.poll();
    }
}

시간·공간 복잡도 (실제 문제에서는 고려할 필요 X)

  • 시간 복잡도: O(N)
    (한 번은 push/enqueue, 한 번은 pop/dequeue 순회)
  • 공간 복잡도: O(N)
    (stack과 queue에 N개 문자 저장)

어려웠던 점

  • queue와 stack을 어떤 구현체로 초기화할지 선택하는 데 고민이 있었다.
    Java에는 Stack 클래스가 있지만 오래된 동기화 기반 클래스이며 성능이 떨어지기 때문에,
    더 빠르고 가벼운 ArrayDeque를 stack/queue 용도로 사용하는 것이 적합하다.

배운 점 및 팁

  • Java에서는 Stack을 거의 사용하지 않고, ArrayDeque로 충분히 stack 동작을 구현한다.
  • ArrayDeque는 동기화가 없어 Stack보다 성능이 좋고, LinkedList보다 메모리 사용도 효율적이다.
  • Queue도 마찬가지로 LinkedList보다 ArrayDeque가 더 빠르다.
  • 배운건 Stack과 Queue는 다른 방식으로 작동한다이지만 실질 구현은 Deque로 한번에 처리 가능하다는게 참 아이러니하다.

참고 및 링크


추가 연습 문제

profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글