문제
https://school.programmers.co.kr/learn/courses/30/lessons/120843#
풀이
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
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) qr code (0) | 2024.01.20 |
---|---|
프로그래머스, 자바스크립트) 영어가 싫어요 (0) | 2024.01.20 |
프로그래머스, 자바스크립트) 커피 심부름 (1) | 2024.01.18 |
프로그래머스, 자바스크립트) 리스트 자르기 (0) | 2024.01.18 |
프로그래머스, 자바스크립트) 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2024.01.17 |