“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
공 던지기
머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
function solution(numbers, k) {
return numbers[(k - 1) * 2 % numbers.length];
}
배열 인덱스는 0부터 시작하므로 k - 1을 해줍니다. 이를 통해 k번째 공을 던지는 사람의 인덱스를 구합니다.
그 다음, 2를 곱하고 numbers.length로 나눈 나머지 값을 계산합니다. 이를 통해 순환적인 인덱스 접근을 구현합니다.
만약 numbers 배열의 길이가 5라고 가정해보겠습니다. k가 1일 때, (1 - 1) * 2 % 5는 0이 됩니다. 따라서 첫 번째 공을 던지는 사람의 인덱스인 0이 반환됩니다.
만약 k가 2일 때, (2 - 1) * 2 % 5는 2가 됩니다. 따라서 세 번째 공을 던지는 사람의 인덱스인 2가 반환됩니다.
이런 식으로 k가 증가할 때마다 2씩 곱하고 배열 길이로 나눈 나머지를 계산하면, 주어진 배열에서 순환적으로 사람을 선택할 수 있습니다.
따라서 최종적으로 (k - 1) * 2 % numbers.length를 통해 k번째로 공을 던지는 사람의 번호를 반환합니다.
배열 회전시키기
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
function solution(numbers, direction) {
if(direction === 'right') {
numbers.unshift(numbers.pop())
} else {
numbers.push(numbers.shift())
}
return numbers
}
direction이 'right'인지 확인합니다. 만약 direction이 'right'라면, 배열의 오른쪽으로 회전해야 합니다.
오른쪽으로 회전하기 위해 numbers 배열에서 마지막 요소를 제거하고(pop()) 해당 요소를 배열의 맨 앞에 추가(unshift())합니다. 이를 통해 배열이 오른쪽으로 한 칸씩 회전됩니다.
만약 direction이 'left'라면, 배열의 왼쪽으로 회전해야 합니다.
왼쪽으로 회전하기 위해 numbers 배열에서 첫 번째 요소를 제거하고(shift()) 해당 요소를 배열의 맨 뒤에 추가(push())합니다. 이를 통해 배열이 왼쪽으로 한 칸씩 회전됩니다.
마지막으로, 회전된 numbers 배열을 반환합니다.
예를 들어, 주어진 numbers가 [1, 2, 3, 4, 5]이고 direction이 'right'일 경우, 오른쪽으로 한 칸씩 회전합니다. 따라서 반환되는 결과는 [5, 1, 2, 3, 4]입니다.
반대로, numbers가 [1, 2, 3, 4, 5]이고 direction이 'left'일 경우, 왼쪽으로 한 칸씩 회전합니다. 따라서 반환되는 결과는 [2, 3, 4, 5, 1]입니다.