[백준] 2164 카드2

문제


N장의 카드가 차례로 1~N까지 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복한다.

  • 제일 위에 있는 카드를 바닥에 버린다.
  • 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.

N이 주어졌을 때 가장 마지막까지 남는 카드를 구하는 프로그램을 작성하시오.

입력 및 출력


첫 번째 줄: 정수 출력: 남게 되는 카드의 번호

Queue


  • 선입선출(FIFO) 형식의 자료구조.
  • 뒤에서 새로운 데이터가 추가되고 앞에서 데이터가 하나씩 삭제되는 구조
  • 삽입이 일어나는 곳을 후단(rear), 삭제가 일어나는 곳을 전단(front)라고 함

자바가 제공하는 큐

  1. Queue에 값 추가
     queue.add(x)
     queue.offer(x)
    
    • add() & offer() 공통점

      1) 큐 맨 뒤에 값 삽입
      2) 추가 성공 시 true 반환

    • 차이점

      1) add()
        - 큐가 꽉 차있는 경우 IllegalStateException Error 발생

      2) offer()
        - 큐가 꽉 차있는 경우 false 반환

  2. Queue 값 제거
     queue.remove()
     queue.poll()
     queue.clear()
    
    • remove() & poll() 공통점

      • 큐의 맨 앞에 있는 값을 반환한 후 삭제한다.

    • 차이점

      1) remove()

      • 큐가 비어있는 경우 NoSuchElementException Error 발생


      2) poll()

      • 큐가 비어있는 경우 null 반환

    • clear(): 큐를 완전히 비움

  3. 그 외

     queue.peek() // 큐의 맨 앞의 값 반환
     queue.size() // 큐의 크기 반환
    

코드

방식 1. 자바의 Queue클래스 이용

방식 2. Queue 직접 구현

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus