import sys
from collections import deque
n=int(sys.stdin.readline().strip())
d1=deque(list(i for i in range(1, n+1)))
while len(d1)>1:
d1.popleft()
d1.append(d1.popleft())
print(d1[0])
python의 덱을 사용해 풀었다.
그런데 자바스크립트의 경우, 같은 방식으로 shift()
와 pop()
을 사용하면 시간초과가 난다. 그래서 아래 코드와 같이 start 위치(맨 위)를 기억하여 n*2 동안 반복문을 실행해줬다.
// 카드2
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const [n] = fs.readFileSync(filePath).toString().trim().split("\n").map(Number);
let l1 = [];
for (let i = 1; i <= n; i++) {
l1.push(i);
}
for (let start = 0; start < n * 2; start = start + 2) {
l1.push(l1[start + 1]);
}
console.log(l1[n * 2 - 2]);