문제
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 |
댓글