Lesson 2 (Arrays) - CyuclicRotation(Easy)
Test results - Codility
An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9,
app.codility.com
점수: 62/100
일단 코딜리티는 문제를 제출하면 코드 수정을 못하더군요.
테스트 케이스를 추가하는 능력도 중요한 것 같습니다...
이번 문제는 숫자 배열 A가 주어지면 요소를 한칸씩 다음 인덱스로 이동시키는 문제입니다. 이때 마지막 인덱스의 요소는 첫 번째 인덱스가 됩니다. (즉, 회전시킵니다) 예를 들어 1 2 3 4 5 라는 배열이 있으면 5 1 2 3 4 가 됩니다. 이것을 주어진 횟수 K만큼 반복합니다.
function solution(A, K) {
const newNums = [];
for (let i = 0; i < K; i++) {
for (let j = 0; j < A.length; j++) {
newNums[j + 1] = A[j];
}
newNums[0] = newNums.pop();
A = [...newNums];
}
return newNums;
}
문제1: K가 0일 때 빈 배열이 나온다.
문제2: A가 빈 배열일 때 에러가 발생한다.
모범답안
function solution(A, K) {
const len = A.length;
if (len === 0) return A; // 빈 배열 처리
K = K % len; // K가 배열 길이보다 클 경우 회전 최적화
const rotated = A.slice(-K).concat(A.slice(0, len - K)); // 회전 구현
return rotated;
}
배열 길이보다 K가 크다면 그 전의 결과와 동일하다는 점에 착안한 코드입니다. 반복문을 돌리지 않고 해결할 수 있습니다.
slice(-K)는 뒤에서부터 K번째에 있는 수까지 가져옵니다.
사용자 커스텀 테스트 케이스 팁
- K는 0에서 100 사이의 정수라는 것이 조건임. 0이랑 100이라는 경계값을 넣어보기. (Edge Case Test)
- A라는 배열의 모든 요소의 값이 동일할 경우를 넣어보기. (Repetive Input Test)
반복적인 배열은 new Array(5).fill(1); 로 쉽게 만들 수 있습니다.
5 크기의 희소 배열을 만들어서 그 배열을 1로 채우는 코드입니다.
'IT > JavaScript & TypeScript' 카테고리의 다른 글
| [JavaScript/알고리즘] FrogJmp (0) | 2025.01.05 |
|---|---|
| [JavaScript/알고리즘] OddOccurrencesInArray (feat. Map) (0) | 2025.01.04 |
| [JavaScript/알고리즘] BinaryGap (1) | 2025.01.03 |
| [JavaScript/알고리즘] K번째수 (feat. sort() 메소드) (0) | 2024.12.17 |
| [TypeScript] 유틸리티 타입 (Partial, Required, Record, Pick, Omit, Exclude) (1) | 2024.12.12 |