
사진에 있는 입출력 예를 잘 보자.
numbers라는 정수로 된 매개변수가 있고,
매개변수 k는 공을 던지는 횟수이다.
제일 중요한 공을 1번 던질 때 마다 던지는 사람의 우측 1명을 건너 뛴다.
그리고, k번째 공을 던지는 사람을 찾아야한다.
자, 생각해 보면 numbers 배열 [1,2,3,4,5]가 있다 생각하자.
공을 던지는 횟수는 3 이다.
그럼 1번이 3번한테 1번째 공을 던지고,
3번이 5번 한테 2번째 공을 던지고,
5번은 1번을 뛰어넘고 2번한테 3번째 공을 던진다.
마지막에 공을 던진 사람은 5번이다.
이걸 모듈러 연산을 이용해서 배열의 길이를 제한해서 문제를 풀이 할 거다.
function solution(numbers, k) {
let result = ''
for (let i = 0; i < k; i++) {
result = numbers[(i * 2) % numbers.length]
}
return result
}
먼저 결과 값을 빈 값으로 선언해주고,
for문을 돌리는데 for문의 조건 문으로 i < k 보다 작다고 설정한다.
우리는 k번째 공을 받은 사람이 아닌 k번째 공을 던지 사람을 구해야하니까.
그리고 제일 중요한 numbers 배열의 인덱스 값을 구하는 로직
일단, numbers 배열이 [1,2,3,4,5]라 생각하자.
공을 던지는 횟수는 5번이다.
그리고 우리가 구해야하는 사람은 5번째 공을 던지는 사람이다.
(인덱스 * 2)를 한 이유는 공을 처음 던진 사람은 0번째 인덱스에 위치한 1번이고,
그 다음 던지는 사람은 1번째 인덱스가 아닌 2번째 인덱스에 위치한 3번이다.
이런 식으로 5번째 공을 던지는 사람은 10번째 인덱스에 위치한 사람이다.
어? 그런데 배열의 인덱스는 0부터 4까지인데?
여기서 %를 이용해서 배열의 길이를 제한한다.
(인덱스 * 2) % numbers의 길이
( 4 * 2 ) % 5의 결과 값은 3이된다.
result = numbers[3]
numbers의 3번째 인덱스의 요소는 4이다.
뭔가 설명하기가 난해해서 예시를 들어 설명을 하였는데,
보는 분들이 이해가 될랑가 모르겠소..
댓글