[HackerRank] - Save the Prisoner

sarang_daddy·2023년 2월 15일
0

문제출처

문제

사람 = n
캔디 = m
시작 = s

이 주어졌을때, 마지막으로 캔디를 먹는 사람은?

예제

7 19 2 => 6
3 7 3 => 3

풀이

  1. 주어지는 수의 범위가 너무 크기에 배열이나 순환이 아닌 수학적으로 접근했다.
  2. 캔디 % 사람수 = 마지막으로 순서대로 먹을 캔디 수량
  3. (lastCycle + s - 1) 남은 캔디를 s부터 먹으면 마지막에 먹는 사람값
  4. 마지막 인덱스가 넘어가면 처음으로 돌아가야하므로 % n이 마지막에 먹는 사람이다.
function saveThePrisoner(n, m, s) {
  const lastCycle = m % n;

  if ((lastCycle + s - 1) % n === 0) {
    return n;
  } else {
    return (lastCycle + s - 1) % n;
  }
}

다른 사람 풀이

function saveThePrisoner(n, m, s) {
    return (m-1 + s)%n || n;
}
profile
한 발자국, 한 걸음 느리더라도 하루하루 발전하는 삶을 살자.

0개의 댓글