코딩테스트 공 던지기
문제 설명

출력 예시


머쓱이가 친구들과 공을 던지며 노는 문제입니다.
공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있다고 하네요.
정수 k가 주어졌을 때 k번째 공을 던질 사람을 찾아내는 문제입니다!
즉 [1,2,3,4] k=3 이렇게 문제가 있으면 세번째 던질 요소는 1입니다.
1->3->1 이렇게 폴짝폴짝 뛰어 다니기 때문이죠~
바로 풀이 들어가보겠습니다
const numbers = [1, 2, 3, 4, 5, 6];
let k = 5;
var answer = 0;
let len = numbers.length;
//3
배열과 k가 주어졌습니다. 5번째 던질 차례인 사람을 찾는거기 때문에 폴짝뛰어보겠습니다~
1->3->5->1->3
답은 3이 나와야 합니다. 더 가봅시닷
const numbers = [1, 2, 3, 4, 5, 6];
let k = 5;
var answer = 0;
let len = numbers.length;
answer = ((k*2)-1)%len
//3
((k*2)-1)%len 이 공식을 쓰면 차례인 사람이 나옵니다!
k를 2만큼 곱하여 점프를 하고 -1을 해주어 던질 사람을 찾습니다.
k가 큰 숫자일 경우 배열의 크기를 넘어가버리니 numbers 갯수만큼 나눠 나머지가 던질 사람 차례 값이 됩니다.
((2*5)-1)%6 = 3
5번째로 던질 사람은 요소 3 입니다!
답을 찾고 테스트를 해보니..

어라?? 실패가 뜹니다.. 무슨 일일까 하고 반례를 살짝 찾아보니,
const numbers = [1, 2, 3];
let k = 5;
var answer = 0;
let len = numbers.length;
answer = ((k*2)-1)%len
//0
이런경우 풀이를 해보면,
((5*2)-1)%3
9%3 = 0
나머지가 0이 나와 답을 못찾아 오는 상황이 되어버립니다..!
0이 나오는 경우 다른 문제도 디버깅을 해본결과 항상 마지막 요소가 던질 차례가 옵니다.
그러므로 조건문을 하나 달아주겠습니다.
const numbers = [1, 2, 3];
let k = 5;
var answer = 0;
let len = numbers.length;
answer = ((k*2)-1)%len;
if(answer == 0){
answer = numbers[len-1]
}
//3
numbers의 마지막 배열을 골라주면 답이 잘 나오는 거 같습니다~
끝!!