๐ ๋ฌธ์ ์ค๋ช
- N์ฅ์ ์นด๋๋ฅผ ์ ๋ ฅ ๋ฐ๋๋ค.
- N์ฅ์ ์นด๋: ๊ฐ๊ฐ์ ์นด๋๋ ์ฐจ๋ก๋ก 1๋ถํฐ N๊น์ง ๋ฒํธ๊ฐ ๋ถ์ด์๋ค. 1๋ฒ ์นด๋๊ฐ ์ ์ผ ์, N๋ฒ ์นด๋๊ฐ ์ ์ผ ์๋์ ์์นํ๋ค.
- ๋ค์๊ณผ ๊ฐ์ ๋์์ ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณตํ๋ค. 1) ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ๋ฒ๋ฆฐ๋ค. 2) ๊ทธ ๋ค์์ผ๋ก ๊ฐ์ฅ ์์ ์๋ ์นด๋๋ฅผ ์ต ํ๋จ ์นด๋์ ๋ฐ์ผ๋ก ์ฎ๊ธด๋ค.
๐ก ์์ด๋์ด
ArrayDeque
๋ฅผ ์ฌ์ฉํด์ cardSet์ ๊ตฌํํ๋ค.Deque
์ธํฐํ์ด์ค ๊ตฌํ ์, ๊ณต์ ๋ฌธ์์์ArrayDeque
์ฌ์ฉ์ ๊ถํ๋ค. ๊ณต์ ๋ฌธ์
- ์์ ์ฑ์ ์ํด์
.remove
๋ณด๋ค๋.pollFirst
๋ฅผ ์ฌ์ฉํ๋ค..remove()
๋ ๋ฑ์ด ๋น์ด ์์ ๋NoSuchElementException
์ ๋ฐ์์ํค์ง๋ง,.pollFirst()
๋ null์ ๋ฐํํ๋ฏ๋ก ์์ธ ์์ด ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Deque<Integer> cardSet = new ArrayDeque<>();
for (int i = 1; i <= N; i++) {
cardSet.add(i);
}
while (cardSet.size() > 1) {
cardSet.pollFirst();
cardSet.addLast(cardSet.pollFirst());
}
System.out.println(cardSet.peek());
}
}
โฑ ์๊ฐ๋ณต์ก๋
- ์นด๋๋ ์ด N์ฅ์ด๊ณ ,
pollFirst()
์addLast()
์ฐ์ฐ์ ๊ฐ๊ฐ ์๊ฐ ๋ณต์ก๋O(1)
์ธ Deque์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. - ์นด๋๋ฅผ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณตํ๋ฏ๋ก ์ด N๋ฒ์ ์ฐ์ฐ์ด ์ํ๋๋ค.
- ๋ฐ๋ผ์ ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค.
โ๏ธ ๋๋ ์
- ์์ผ๋ก ๋๋ถ๋ถ์
ArrayDeque
๋ก ๊ตฌํ ์๋ ํด์ผ๊ฒ ๋ค. - ์์ ์ฑ์ ์ํด
.poll
.peek
ํจ์๋ฅผ ์ ๊ทน ์ฌ์ฉํด์ผ๊ฒ ๋ค.