티스토리 뷰

java/BAEKJOON

java 1835번 카드 (백준)

rofn123 2023. 4. 2. 01:15
import java.util.Scanner;

class Deque {
	private final static int M = 1001;
	private static int front;
	private static int rear;
	private static int[] data = new int[M];

	public Deque(){front=rear=0;}
	public boolean isEmpty() {return front == rear;} //비었는가?
	public void fPush(int e) { //앞에 넣기
		data[front] = e;
		front = (front-1+1001) % 1001;
	}
	public void rPush(int e) { //뒤에 넣기
		rear = (rear+1) % 1001;
		data[rear] = e;
	}
	public int fPop() { //앞에서 꺼내기
		front = (front+1) % 1001;
		return data[front];
	}
	public int rPop() { //뒤에서 꺼내기
		int tmp = data[rear];
		rear = (rear-1+1001)%1001;
		return tmp;
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		Deque deq = new Deque();
		int n = scan.nextInt();
		for(int i=n; i>0; i--) { //n, ... , 1까지 차례 차례 덱에 집어넣습니다.
			deq.fPush(i);
			for(int j=i; j>0; j--) deq.fPush(deq.rPop()); //들어간 수의 크기만큼 뒤에서 꺼내서 앞에 집어넣습니다.
			//deq.display(); 덱 확인용입니다.
		}
		while(!deq.isEmpty()) System.out.printf("%d ", deq.fPop()); //앞에서 부터 덱에서 꺼내주면서 출력합니다
		scan.close();
	}
}

 

풀이 : 덱 (deque)

 

0. class로 deque을 구현합니다. 메서드 들은 정적으로 만들필요가 없으니 그냥만들며, 필드들은 계속 사용하므로, static으로 만들어 줍니다.

 

1. n을 입력 받습니다.

2. n을 덱에 집어 넣고, 덱의 맨 뒤에서 꺼낸다음 맨 앞에다가 넣는 것을 n번하면 됩니다

3. 2의 과정은 1까지 덱에 집어넣으면, 종료합니다.

4. deque의 앞부터 출력합니다

 

https://www.acmicpc.net/problem/1835

 

1835번: 카드

첫 번째 줄에 카드의 개수 N(1 ≤ N ≤ 1,000)이 주어진다.

www.acmicpc.net

 

'java > BAEKJOON' 카테고리의 다른 글

java 13241번 최소공배수 (백준)  (0) 2023.04.25
java 1059번 좋은 구간 (백준)  (0) 2023.04.16
java 16562번 친구비 (백준)  (0) 2023.03.19
java 1034번 거짓말 (백준)  (1) 2023.03.19
java 16120번 PPAP (백준)  (0) 2023.03.18
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함