“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
공던지기
머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
function solution(numbers, k) {
return numbers[(k - 1) * 2 % numbers.length];
}
k에서 1을 빼줍니다. 이는 인덱스가 0부터 시작하는 반면에 k는 1부터 시작하기 때문입니다. 이렇게 함으로써 k번째 공을 던지는 사람의 인덱스를 구할 수 있습니다. 다음으로, (k - 1) * 2를 계산합니다. 이를 통해 순환적으로 사람을 선택할 수 있도록 인덱스를 구합니다. (k - 1)을 한 이유는 앞서 1을 뺀 것처럼 인덱스를 0부터 시작하기 위해서입니다. * 2를 한 이유는 오른쪽으로 한 명을 건너뛰어야 하기 때문입니다. 마지막으로, numbers.length로 나눈 나머지를 구합니다. 이를 통해 인덱스가 배열의 길이를 벗어나지 않도록 합니다. 나머지 값을 구하는 이유는 배열의 길이보다 큰 인덱스를 가지더라도 순환적으로 돌아가기 위해서입니다. 따라서 최종적으로 (k - 1) * 2 % numbers.length를 통해 k번째로 공을 던지는 사람의 번호를 반환합니다. 예를 들어, 주어진 numbers 배열이 [1, 2, 3, 4, 5]이고 k가 2일 경우, k - 1은 1이 되고, (k - 1) * 2는 2가 됩니다. 이후 numbers.length인 5로 나눈 나머지는 2입니다. 따라서 반환되는 결과는 배열의 세 번째 요소인 3입니다.
배열 회전시키기
정수가 담긴 배열 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]입니다.