[HackerRank/C++] Save the Prisoner!

2023. 2. 6. 08:09코딩테스트 해커랭크/Algorithms -Easy

죄수들의 원형 탁자에 앉아있어 순서는 마지막에서 다시 1로 순환한다

 

죄수에게 사탕을 순서대로 줄때, n명의 죄수가 탁자에 둘러앉아 있으며 m개의 사탕을 가지고 있고,

 

s번째 죄수부터 사탕을 주기 시작할때 마지막으로 사탕을 받는 죄수는 몇번째 죄수인지 return 한다

 

int saveThePrisoner(int n, int m, int s)
{
    int result = (m + s - 1) % n;
    
    if (!result)
        result = n;
    
    return result;
}

구해야 할 것은 마지막 사탕을 받는 죄수이므로 첫번째로 몇번째 죄수가 받았는지는 중요하지 않다

 

따라서 m + s를 더하고, 마지막이므로 -1을 한 죄수가 마지막으로 사탕을 받는 죄수일 것이다

 

이 값을 죄수 수인 n으로 나눠 나머지 값을 찾는다

 

만약 나머지가 0이면 n번째 죄수가 마지막으로 사탕을 받은 것이므로 예외처리를 해 result값을 n으로 바꾸고 result를 return 한다