2164 카드2 ⬛

kkmdevel·2024년 9월 27일

코딩테스트

목록 보기
7/21

📋문제 정리

  • 숫자 N이 주어지면 1~N까지의 번호가 적힌 카드가 있다.
  • 제일 위에(작은) 카드를 버리고 그 다음 카드를 맨 밑으로 놓는다
  • 카드 한개가 나올때까지 반복한다. 남은 카드를 출력한다.

🎯풀이

  • 숫자 카드가 들어온곳과 반대로 나가기 때문에(작은수부터) Queue의 문제다.
  • 처음 숫자를 지워버리고 다음 숫자는 빼서 다시 뒤에 놓는다. 반복한다.

Queue 문제를 풀때는 Deque를 쓰는게 더 좋다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;

public class Main {

  static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  static StringTokenizer st;
  static StringBuilder sb =  new StringBuilder();

  public static void main(String[] args) throws IOException {
    st = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(st.nextToken());
    Deque<Integer> deque = new ArrayDeque<Integer>(); //Deque 생성
    
    for(int i=0;i<n;i++){
      deque.addLast(i+1);
    } //Deque 초기화

    while(deque.size()>1){
      deque.removeFirst();
      int num = deque.removeFirst();
      deque.addLast(num);
    } // 첫번째 수 버리고 그 다음 수를 뒤로 다시 넣음
  
    sb.append(deque.removeFirst());
    System.out.println(sb);
    br.close();
  }
}
profile
25/08/12

0개의 댓글