[ 성능 요약 ]
메모리: 49004 KB, 시간: 272 ms
[ 분류 ]
자료 구조(data_structures), 큐(queue)
[ 문제 설명 ]
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.
N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 정수 N(1 ≤ N ≤ 500,000)이 주어진다.
[ 출력 ]
첫째 줄에 남게 되는 카드의 번호를 출력한다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 카드2 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int N = sc.nextInt();
Queue<Integer> queue = new LinkedList<>();
/* 1. 1부터 주어지는 카드의 수까지 큐에 추가하기(넣기) */
for(int i = 1; i <= N; i++) { // ex) N=6 --> 큐에 1~6까지 집어넣기
queue.add(i);
}
/* 2. 카드 1장 남을때까지 큐의 맨 앞에있는 숫자 꺼내고 맨 앞으로 오는 숫자 꺼내서 큐의 맨 뒤로 옮기기 */
while(queue.size() > 1) { // 카드가 1장만 남을때까지
queue.poll(); // 큐의 맨 앞에 있는 카드 꺼내기(꺼내서 버리는것임)
queue.add(queue.poll()); // 그 다음으로 오는 맨 위의 카드 꺼내서 큐의 맨 뒤로 옮기기(추가하기)
}
/* 3. 마지막으로 남은 카드(숫자) 꺼내서 출력하기 */
System.out.println(queue.poll());
}
}
[ 슈도코드 작성 ]
( 카드의 개수 ) N 선언하기
( 카드 저장할 큐 ) queue 선언하기
for ( 1부터 카드의 개수만큼 반복 ) {
큐에 카드 추가하기
}
while ( 카드가 1장만 남을때까지) {
큐 맨 위의 카드 꺼내기 : poll( )
그 다음으로 큐 맨 위에 오는 카드 꺼내서 poll( ), 맨 뒤로 보내기 add( )
}
마지막으로 남은 카드 큐에서 꺼내서 출력하기
* 큐(Queue) *
- JAVA 에서 제공하고 있는 큐(Queue)는 interface 형태로 연결 리스트(LinkedList)를 통해서 생성한다.
그렇기 때문에 사이즈가 가변적이고, 쉽게 늘어난다.
Data 구조의 양쪽 단에서만 저장/접근 할 수 있는 컬렉션이다.
[ 참조 링크 ]
https://2ham-s.tistory.com/288
[JAVA]큐(Queue)&PriorityQueue 와 연결리스트(LinkedList) 란?
프로그래머스 문제를 풀면서 큐에 대해 다시 한번 정리를 하면 좋겠다고 생각해서 글로 남겨보려고 한다. 먼저 자료구조의 종류를 살펴보면 아래의 사진처럼 종류가 다양하다. 그중에서도 Queue
2ham-s.tistory.com
http://www.tcpschool.com/java/java_collectionFramework_stackQueue
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
https://devnick.tistory.com/15
큐(queue)와 링 버퍼(ring buffer) 연결 리스트 (Linked list)
큐 형태의 자료구조는 데이터를 쌓아두는 자료구조로, 선입선출(FIFO)인 점이 특징이다. 주로 일시적인 자료의 저장에 많이 사용된다. 큐의 경우 가장 먼저 들어간 데이터를 먼저 꺼내고, 나중에
devnick.tistory.com
'Algorithm > Beakjoon' 카테고리의 다른 글
[Silver I] 절댓값 힙_P11286 (0) | 2023.01.25 |
---|---|
[Bronze II] 수 정렬하기_P2750 (0) | 2023.01.23 |
[Gold IV] 좋다_P1253 (0) | 2023.01.17 |
[Gold III] 나머지 합_P10986 (0) | 2023.01.17 |
[Silver IV] 주몽_P1940 (0) | 2023.01.12 |