[JAVA 문제 풀이] 30. 공 던지기 (120843)

Stupefyee's avatar
Nov 22, 2024
[JAVA 문제 풀이] 30. 공 던지기 (120843)
notion image
notion image

내가 작성한 코드

💡
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]으로 접근 하지 않아도 됨
 
  1. (k-1)
      • k-1은 첫 번째 사람을 기준으로 공을 던진 횟수를 표현합니다.
      • 예를 들어, 3번째로 공을 던지는 경우, 공은 실제로 2번 던져졌으므로 k-1을 사용합니다.
  1. (k-1) * 2
      • 한 번 공을 던질 때마다 한 명을 건너뛰므로, 실제로 이동하는 거리는 던진 횟수에 2를 곱한 값입니다.
  1. % numbers.length
      • 배열의 길이만큼 순환해야 하므로, numbers.length로 나머지를 계산하여 인덱스를 순환시킵니다.
  1. +1
      • 배열의 번호가 1부터 시작한다고 했으므로, 결과값에 +1을 추가하여 1 기반 번호를 반환합니다.
Share article

stupefyee