

내가 작성한 코드
class Solution {
public int solution(int[] numbers, int k) {
int n = numbers.length; // 친구들의 총 인원 수
int index = 0; // 공을 던질 사람의 초기 위치
// k번째로 던질 때까지 반복 rlfdl6 k 3
for (int i = 0; i < k - 1; i++) {
index = (index + 2) % n; // 한 명 건너뛰고 다음 사람
}
return numbers[index];
}
}
다른 사람의 코드
class Solution {
public int solution(int[] numbers, int k) {
return (k-1)*2 % numbers.length+1;
}
}
동작 원리
1. numbers가 1~n 까지로 세팅되서 numbers[n]으로 접근 하지 않아도 됨
- (k-1)
k-1
은 첫 번째 사람을 기준으로 공을 던진 횟수를 표현합니다.- 예를 들어, 3번째로 공을 던지는 경우, 공은 실제로 2번 던져졌으므로
k-1
을 사용합니다.
- (k-1) * 2
- 한 번 공을 던질 때마다 한 명을 건너뛰므로, 실제로 이동하는 거리는 던진 횟수에 2를 곱한 값입니다.
- % numbers.length
- 배열의 길이만큼 순환해야 하므로,
numbers.length
로 나머지를 계산하여 인덱스를 순환시킵니다.
- +1
- 배열의 번호가
1
부터 시작한다고 했으므로, 결과값에+1
을 추가하여 1 기반 번호를 반환합니다.
Share article