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

[백준] 자바 2161 카드1

by 경적필패. 2021. 6. 24.
반응형

문제

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

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

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

N이 주어졌을 때, 버린 카드들을 순서대로 출력하고, 마지막에 남게 되는 카드를 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 버리는 카드들을 순서대로 출력한다. 제일 마지막에는 남게 되는 카드의 번호를 출력한다.

 


테스트 케이스

초록색 입력 / 검은색 출력

 


접근

간단하게 리스트를 이용하여 구현하였습니다.

문제가 원하는대로 리스트 안에 값을 다 넣은 뒤, 리스트 안의 값들을 조작하는 식으로 구현하였더니 문제를 해결할 수 있었습니다.

 

//0.index_size를 검사하여 현재 몇 개의 숫자가 리스트에 들어있는지 확인(1개 이하면 출력 후 반복문 종료)
//1. 제일 위에 있는 값을 출력하고
//2. 제거해주고
//3. 현재 제일 위의 값을 저장한 후
//4.(3) 과정에서 저장한 값을 제일 밑으로 보낸 후 값이 하나 줄었으므로 인덱스 사이즈 하나 줄인 후, 밑으로 옮겼던 값 위에서 제거


코드

	import java.awt.desktop.SystemEventListener;
	import java.io.*;
	import java.math.*;
	import java.util.*;
	
	public class Main {
	
		/*
	 	2161 problem 카드1
		*/
		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));
			ArrayList<Integer> list = new ArrayList<>();
			
			int num = Integer.parseInt(br.readLine());
			int changeNum = 0;
			int index_size = num;
			
			//0이 아니라 1부터 시작
			for(int i=1; i<num+1; i++) {
				list.add(i);
			}
			//0.index_size를 검사하여 현재 몇개의 숫자가 리스트에 들어있는지 확인(1개이하면 출력후 반복문 종료)
			//1.제일 위에 있는값을 출력하고
			//2.제거해주고
			//3.현재 제일 위의 값을 저장 한 후
			//4.(3)과정에서 저장한 값을 제일 밑으로 보낸후 값이 하나 줄었으므로 인덱스 사이즈 하나 줄인후, 밑으로 옮겼던값 위에서 제거
			for(int i=0; i<num; i++) {

				if(index_size<=1) {
					bw.write(String.valueOf(list.get(0)));
					break;
				}
				bw.write(String.valueOf(list.get(0))+" ");
				list.remove(0);
				changeNum = list.get(0);
				
				list.add(index_size-1,changeNum);
				index_size--;
				list.remove(0);
			}
			
			bw.flush();
			bw.close();
		}
	}

주의

입력값이 1이 들어왔을때도 생각해주어야 함.

 

반응형

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

[백준] 자바 20001 고무오리 디버깅  (0) 2021.06.28
[백준] 자바 17608 막대기  (0) 2021.06.25
[백준] 자바 1009 분산처리  (0) 2021.03.31
[백준] 자바 3986 좋은 단어  (0) 2021.03.29
[백준] 자바 5397 키로거  (0) 2021.03.27

댓글