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];

}