문제

https://www.acmicpc.net/problem/2164

1차 풀이 - 시간초과

function run(input) {
  const result = Array.from({ length: Number(input) }, (_, i) => i + 1);
  let isDiscard = false;

  while (result.length > 1) {
    const pick = result.shift();
    if (!pick) break;

    if (isDiscard) {
      result.push(pick);
      isDiscard = false;
    } else isDiscard = true;
  }

  return result[0];
}

개선

function run(input: number) {
  const result = Array.from({ length: Number(input) }, (_, i) => i + 1);
  let front = 0;

  while (result.length - front > 1) {
    front++;

    result.push(result[front]);
    front++;
  }

  return result[front];
}