Java/Coding Test
공 던지기 문제풀이
최고다최코딩
2023. 9. 14. 02:23
728x90
공은 옆사람 건너띄고 다음사람에게만 던지며
마지막 배열의 원소 다음은 처음 원소와 맞닿아 있다.
k번 던질 때 마지막으로 던지는 사람은?
public int solution(int[] numbers, int k) {
Queue<Integer> list = new LinkedList<>();
for (int j = 0; j < numbers.length; j++) {
list.offer(numbers[j]);
}
for (int i = 0; i < k-1; i++) {
list.offer(list.poll());
list.offer(list.poll());
}
return list.peek();
}
맨 마지막 사람과 처음 사람이 맞닿아 있는것을 표현하기위해서 Queue 로 표현했다.
다른 풀이
k-1번 던진다는 뜻은 0번 인덱스에서 +2씩 k-1번 인덱스로 옮긴다는것이다.
=> 2k-2번 인덱스가 마지막으로 던질 사람이다.
만약 3명이 3번 던진다면 5번인덱스 => 1,2,3,1,2 5번 인덱스는 ==2
식으로 나타내면 numbers[(2*k-2)%numbers.length+1]이다.
public int solution2(int[] numbers, int k) {
return numbers[(2*k-2)%numbers.length];
}