문제: Save the Prisoner!
난이도: Easy
문제 설명
간수가 원탁에 앉은 죄수들에게 사탕을 나눠주려 한다. 그런데 간수가 장난을 쳐서 가장 마지막에 사탕을 받는 죄수는 반드시 끔찍한 맛의 사탕을 받게 된다. 죄수의 수 n, 사탕의 수 m, 시작하는 좌석의 번호 s가 주어질 경우 몇 번째 좌석의 죄수가 끔찍한 맛의 사탕에 당첨될지를 알아내라.
예를 들어 죄수가 4명, 사탕이 6개, 시작하는 좌석의 번호를 2라고 하면 2, 3, 4, 1, 2, 3으로 3번 좌석에 앉은 죄수가 끔찍한 맛의 사탕에 당첨된다.
문제 해결
소스 코드
static int saveThePrisoner(int n, int m, int s) {
int result = 0;
if(n >= m) {
result = m + s - 1;
} else if(m % n == 0 && s == 1) {
result = n;
} else if(m % n == 0 && s != 1) {
result = s - 1;
} else {
result = m % n + s - 1;
}
if(result > n) {
result -= n;
}
return result;
}
해설
이 문제는 수학적인 계산으로 해결이 가능하다. n>=m일 때 한 가지, n<m일 때 세 가지의 경우 총 네 가지의 경우에 따라 각각의 계산식을 계산하면 원하는 결과를 알아낼 수 있다. 그리 어렵지 않은 문제 같은데 성공률이 78% 정도밖에 되지 않는게 의외였다.
'해커랭크(Problem Solving)' 카테고리의 다른 글
Queen’s Attack II (0) | 2019.10.26 |
---|---|
The Time in Words (0) | 2019.10.20 |
Beautiful Days at the Movies (0) | 2019.10.13 |
Encryption (0) | 2019.10.13 |
Picking Numbers (0) | 2019.10.02 |