문제 해석
- 첫번째 줄에 카드의 장(N)개를 입력 받으면, 1번이 제일 위에 가고, N이 제일 아래 가도록 카드를 놓는다.
- 카드를 모두 놓았다면, 제일 위에 있는 카드를 바닥에 버리고, 제일 위에 있는 카드를 아래에 있는 카드 밑으로 옮긴다. 이러한 과정을 반복해서 마지막에 남게되는 카드를 구하는 프로그램을 작성하면 된다.
- 이해하기 쉽게 그림으로 표현하면 아래와 같다.
코드
import java.io.*;
public class Main {
static int[] queue;
static int front, back;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
queue = new int[N*2];
front = 1;
back = N;
for(int i = 1; i <= N; i++) {
queue[i] = i;
}
br.close();
solution(N);
System.out.println(queue[front]);
}
static void solution(int N){
while(N-- > 1) {
front++;
queue[back + 1] = queue[front];
back++;
front++;
}
}
}
결과
느낀 점
- 문제는 어떤 문제인지 해석했으면서 코드로 만드는 데 오래 걸리는 게 회의감....이 든다.