์ฒ์ ๋ฐฑ์ค์ด๊ฐ ์ ์๋ ์์น๋ฅผ idx
๋ผ๊ณ ํ์. ์ฌ๊ธฐ์ t^3
๋งํผ ์ด๋ํด์ผ ํ๋ค. ์ด๋ ํ ์ค๋ก ์ ์๊ณ ๊ฐ์ฅ ๋๊น์ง ์ด๋ํ๋ฉด ๋ค์ ์ฒ์์ผ๋ก ๋๋์์ค๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ t^3
์ ์ ์ฒด ์ ์๋ ์ฌ๋์ ์๋ก ๋๋ ๋๋จธ์ง๊ฐ ์ค์ ์ค๋ณต ์์ด ์ด๋ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ด๋ค. ํ์ฌ ์ ์๋ ์์น๋ ํฌํจํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ด๋ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์์ 1์ ๋นผ์ฃผ์ด์ผ ํ๋ค. ๋จ๊ณ๋ณ๋ก ์ถ๋ฐํ๋ ์์น๋ ์ด์ ๋จ๊ณ์์ ๋ง์ง๋ง์ผ๋ก ์์นํ๋ ๊ณณ์ด๋ฏ๋ก ์ด์ ์ idx
๊ฐ์ ์ด๋ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ๋ํด์ค์ผ ํ๋ค.
์ต๋ N์ด 5000์ด๊ธฐ ๋๋ฌธ์ int์ ๋ฒ์๋ฅผ ๋์ด์๊ฒ ๋๋ค. ์ค๋ฒํ๋ก์ฐ๊ฐ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๊ณ์ double
๋ก ๊ณ์ฐํ๋ค๊ฐ ๋ง์ง๋ง์ ์ป์ด์ง๋ ๋๋จธ์ง ๊ฐ์ int
๋ก ๋ณํํ๋ค. ํด๋น ์ธ๋ฑ์ค์ ์์นํ ์ฌ๋์ ์ ๊ฑฐํ๋ฉด ๋๋ค.
์๋ฐ์ ๊ฒฝ์ฐ list์์ remove(int n) ์ด๋ฉด n ์ธ๋ฑ์ค์ ์์นํ ๊ฐ ์ ๊ฑฐ
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
list.add(i + 1);
}
int t = 1;
int idx = 0;
while (list.size() > 1) {
idx = (int) ((idx + Math.pow(t, 3) - 1) % list.size());
list.remove(idx);
t++;
}
System.out.println(list.get(0));
}
}