자바 알고리즘 - 큐의 선입 선출 알고리즘_카드게임 알고리즘
시간 제한 | 메모리 제한 |
2 초 | 218 MB |
▶ 문제
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.
N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.
▶ 나의 문제풀이
데큐 : 제일 위에 있는 카드를 버리고 그 다음 카드는 맨 밑으로 이동하여야 함.
자바에서 큐는 list와 같이 사용이 되기 때문에 Queue와 LinkedList를 같이 import 해줘야 합니다.
- Enqueue : 큐 맨 뒤에 데이터를 추가
- Dequeue : 큐 맨 앞쪽의 데이터를 삭제
큐의 성질만 이해한다면 정말 쉬운 문제입니다.
오랜만에 쉬운 문제 풀어서 기분 좋은 금요일~
▶ 나의 코드
package algorithm.doit;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
/* N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며,
* 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다.
우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.*/
public class 카드게임 {
public static void main(String[] args) {
// 1. 스케너 객체 값 입력받기
Scanner sc = new Scanner(System.in);
// 2.queue 객체 생성
Queue<Integer> myQueue = new LinkedList<>();
System.out.println("카드의 개수 입력하시오");
int N = sc.nextInt();
// 3. 카드를 큐에 저장하기 N 보다 작은 수를 순차적으로 큐에 저장
for (int i = 0; i <= N; i++) {
myQueue.add(i);
//
}
// 4. 큐를 이용하여 위의 값은 버리고 그 다음 값은 맨 아래로 이동하기
// 큐의 사이지가 하나가 남기 전까지 반복한다.
while (myQueue.size() > 1) {
// 큐의 제일 위의 값을 poll 하기
myQueue.poll();
myQueue.add(myQueue.poll());
}
// 5. while 문을 다 빠져 나오면 마지막 한개의 수가 큐에 저장될 것임
System.out.println(myQueue.poll());
}
}
<참고>
책: do it 알고리즘 코딩 테스트 자바 편
코딩 테스트: https://www.acmicpc.net/
Baekjoon Online Judge
Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.
www.acmicpc.net
'주니어 기초 코딩공부 > JAVA 활용-Algorithm' 카테고리의 다른 글
JAVA_절댓값 힙 구하는 알고리즘 (Priority Queue Algorithm) (0) | 2023.01.26 |
---|---|
Priority Queue Algorithm 설명 (0) | 2023.01.25 |
JAVA_스텍으로 오름차순 수열 만드는 알고리즘 (LIFO) (2) | 2023.01.17 |
JAVA_투포인터 알고리즘2_'좋은수' 구하기 (0) | 2023.01.12 |
JAVA_투포인터 알고리즘1_주몽의 명령 (0) | 2023.01.11 |