본문 바로가기
공부 정리/백준

[백준] 자바 2164 카드2

by 경적필패. 2021. 9. 20.
반응형

문제

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.

이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.

예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.

N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N(1 ≤ N ≤ 500,000)이 주어진다.

출력

첫째 줄에 남게 되는 카드의 번호를 출력한다.


테스트 케이스

 

입력 1

4

출력 1

4

 

입력 2

1

출력 2

1

 

입력 3

100

출력 3

72


접근

1.숫자하나를 입력받습니다.

2.1부터 숫자까지의 값을 큐에 넣습니다.((1)에서 받은 값이 5이면 1,2,3,4,5를 큐에 넣는다)

3. 문제가 요구하는대로 큐의 제일 앞 숫자를 지우고, 그다음 앞 숫자를 제일 뒤로 보냅니다.

4. 숫자가 하나 남을 때까지 반복합니다.

5. 마지막 남은 숫자를 출력합니다.


코드

import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	 2164 problem
	*/
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num = Integer.parseInt(br.readLine());
		Queue<Integer> q = new LinkedList<>();
		
		for(int i=1; i<=num; i++) {
			q.add(i);
		}
		for(int i=0; i<num-1; i++) {
			q.remove();
			int temp = q.poll();
			q.add(temp);
		}
		bw.write(String.valueOf(q.poll()));
		
		bw.flush();
		br.close();
		bw.close();
	}
}

주의

꼭 큐로 구현할 필요는 없을 듯합니다.

 

반응형

'공부 정리 > 백준' 카테고리의 다른 글

[백준] 자바 9461 파도반 수열  (0) 2021.09.22
[백준] 자바 11727 2xn 타일링 2  (0) 2021.09.21
[백준] 자바 8979 올림픽  (0) 2021.09.17
[백준] 자바 1026 보물  (0) 2021.09.16
[백준] 자바 11653 소인수분해  (0) 2021.09.15

댓글