오늘 뭐했냐/기억하면 좋을 문제들

정해진 수의 반복

스스로에게 2023. 6. 14. 10:58

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

 

생각을 해보자 

  1. 오른쪽으로 한 명을 건너뛰고
  2. return값은 k번째로 공을 던질 사람
  3. 배열의 길이를 넘어갈 경우에 처리
  4. 반복해야할 숫자가 정해져 있다
  • 반복할 숫자가 정해져 있으니 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)에 배열의 길이로 나눈 나머지값을 인덱스로 하면 되는 문제였다

다른 사람의 답을 보고 어떻게 되는거지 하고 생각하니까 나온 답이다