머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
생각을 해보자
- 오른쪽으로 한 명을 건너뛰고
- return값은 k번째로 공을 던질 사람
- 배열의 길이를 넘어갈 경우에 처리
- 반복해야할 숫자가 정해져 있다
- 반복할 숫자가 정해져 있으니 while문을 사용하자
- 한 명을 건너뛰니까 인덱스를 2씩 증가시킨다
- return값이 k번째 던질 사람 => k-1번째 받을 사람
- 배열의 길이를 넘어가면 배열의 길이를 뺀다
이렇게 완성한 것이
function solution(numbers, k) {
let i = 0
while(k-1){
i+=2
if (i>numbers.length) i-=numbers.length
k--
}
return numbers[i];
}
열심히 머리 굴려서 만들었는데 잘 보면은 규칙이 있다
i가 k-1만큼 반복해서 더해진다 -> i*(k-1)
배열의 길이를 넘어가면 배열의 길이만큼 뺀다 즉, 배열의 길이보다 작아야한다 %배열의 길이
결국엔 i*(k-1)에 배열의 길이로 나눈 나머지값을 인덱스로 하면 되는 문제였다
다른 사람의 답을 보고 어떻게 되는거지 하고 생각하니까 나온 답이다
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
| map 사용 (0) | 2023.06.14 |
|---|---|
| 배열의 앞 뒤 추가 제거 (0) | 2023.06.14 |
| 이차원 배열 만들기 splice(), slice()차이 (0) | 2023.06.14 |
| BigInt() 혹은 Math.round() 숫자 값이 클 때 (0) | 2023.06.14 |
| 객체 활용 (0) | 2023.06.13 |