개발/알고리즘(코딩테스트)

프로그래머스, 자바스크립트) 공 던지기

빔네모 2024. 1. 19. 16:17

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120843#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

1번부터 던지며 한명씩 건너뛰므로 1,3,5,7 ... 이런식으로 가게 된다

배열이 [1,2,3] 이고 배열을 길게 늘린다고 가정하면 [1,2,3,1,2,3,1,2,3 ...]

여기서 k번 순서로 던지는 사람은 2k-1번째 사람이 된다. 5번째로 던지는 사람을 구한다고 가정하면

2*5-1 이므로 9. 1-2-3-1-2-3-1-2-3 순서대로 돼서 3번이 5번째 사람이 된다. 

 

결국 배열의 길이로 나눈 나머지 값이 인덱스가 되는 것이다.

다만 여기서 예외가 있다. 나누어떨어지는 경우, 즉 0이되는 경우에는 배열의 마지막 요소를 가르켜야되고 그외 나머지는 index-1번째 요소를 가져오면 된다. 예시값으로 만들어지는 배열은 1,2,3,4,5 순서대로 가지니 0일때는 마지막 요소를 반환하고 0이 아닐때는 그냥 index를 반환하면된다. ((원래 배열에서 꺼낼때는 0부터 시작이므로 index-1을 해줘야함))

 

function solution(numbers, k) {
  const index =  (2 * k - 1) % numbers.length;
  return index === 0 ? numbers[numbers.length -1] : index
}