2164번 카드2
해결코드:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
Deque<Integer> de = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
de.addLast(i+1);
}
while(de.size() > 1){
de.pollFirst();
if(de.size() == 1){
break;
}
de.addLast(de.pollFirst());
}
bw.write(de.getLast()+"");
br.close();
bw.close();
}
}
고민의 시간과 해결 방법:
- 앞에서 빼서 뒤에 넣는다? 바로 자료구조 덱을 떠올렸다.
- 주어진 입력값을 큐 형태로 덱에 넣어준다
- 덱의 크기가 1보다 큰 동안에 반복해서 덱의 맨 앞의 값을 빼주고 덱의 맨 뒤로 맨 앞의 값을 빼서 넣어준다
- 이때 3번의 두 진행 로직 사이에 덱의 크기를 한번더 확인해서 1이면 종료하도록 한다
- 3~4번 과정을 통해 덱에 남아있는 한가지 값을 출력한다.
문제링크:
2164번 - 카드2