코딜리티라는 웹사이트가 있습니다.
알고리즘을 만드는 실력을 기르는 사이트인데요.
저도 틈틈히 하고 있습니다.
오늘은 그 중 두번째 중 하나인 CyclibRotation에 대해 알아봅시다.
먼저 문제입니다.
답은 정해져있지 않으며, 여기에 적은 답은 예시 중 하나일 뿐입니다.
문제
먼저 파라미터는 숫자배열 하나, 숫자 하나입니다.
숫자배열을 두번째 인자인 숫자만큼 Rotate를 하게 됩니다.
(ex: [1, 2, 3]과 1이 오면 한번 Rotate시켜 [2, 3, 1]이 됩니다.
또는 [2, 3, 4, 5]와 3이 오면 [3, 4, 5, 2]가 됩니다.)
배열의 길이와 두번째 인자인 숫자는 0~100까지 가능하며,
배열 안에 있는 숫자는 -1000 ~ 1000까지 올 수 있습니다.
Jell의 답
function solution(A, K) { // A는 Array<Number>, K는 Number형입니다.
if (!A.length) return A // 만약 A가 빈 배열로 오게 되면,
//밑에 있는 코드들(length나 직접 접근 등등)이 실행이 안되기에 그대로 돌려보내고 끝냅니다.
const length = A.length // 먼저 A의 길이를 구합니다.
while(K) { // K가 0보다 큰 동안
const last = A[length - 1] // A의 마지막 값을 저장해둡니다.
for (let i = length - 2; i >= 0; i--) { // 저장한
// 마지막 값을 제외한 나머지 값을 순차적으로
A[i + 1] = A[i] // 뒤로 돌려보냅니다.
}
A[0] = last // 그리고 저장해둔 마지막 값을 맨 앞에 넣어줍니다.
K-- // 한 번 끝났으니 카운트를 체크하면, 다시 while문의 처음으로 가게 됩니다.
}
return A // 모든 처리가 끝난 A를 반환합니다.
}
다시 한 번 말씀드리지만, 이것은 예시 중 하나일 뿐입니다.
여러분의 방법대로도 만들어보세요!