-
[codility] ShiftArray개발관련 2023. 7. 27. 23:57
(문제) 주어진 배열을 오른쪽으로 K(0~100)만큼 이동시킨 배열 반환하는 함수 작성
(my solution)
- 10분도 안되서 풀었으나 intelliJ에서 작성 후, 테스트까지 하다보니 시간이 좀 더 늘어났다.
- 영혼 없이 테스트 케이스를 작성하니, 예외사항 한 가지를 놓쳤다. (반성!)
- 인자 값으로 Array를 받으면 항상 null, length 체크를 통해 빈 배열이 아닌 지 신경써야 한다. (주의)
- result 라는 변수명은 직관적이지 않으니 rotatedArray가 더 나을 것 같다.
- point 라는 변수명은 무슨 역할을 하는 변수인 지 알아보기 어려우니 newIndex가 나을 것 같다.
- point라는 변수는 굳이 필요 없다.
- A가 빈 배열일 때, if문을 통한 별도의 예외처리가 아니라 (아래 chatGPT처럼) 아예 for문이 수행되지 않도록 작성하는 것이 실수할 여지가 적어서 더 바람직해 보인다.
- K가 0일 때, rotation을 수행할 필요가 없으므로 if문을 통해 원래 배열을 리턴하도록 적은 것은 좋아 보임 (chatGPT도 놓친 것)
- 시간복잡도는 O(N)
package codility.tasks; public class ShiftArray { public static int[] solution(int[] A, int K) { if (K == 0 || A == null || A.length == 0) { return A; } int point = K % A.length; int[] result = new int[A.length]; for (int i = 0; i < A.length; ++i) { result[point] = A[i]; point++; point = point % A.length; } return result; } }
(chatGPT)
- 나와 동일한 방식으로 풀었지만 불필요한 변수도 없고 네이밍도 명확하고 코드가 더 간결하다.
- (몇 가지 질문을 던져보니 답변을 codility 사이트에서 가져오는 것 같다.)
class Solution { public int[] solution(int[] A, int K) { int N = A.length; int[] rotatedArray = new int[N]; for (int i = 0; i < N; i++) { int newIndex = (i + K) % N; rotatedArray[newIndex] = A[i]; } return rotatedArray; } }
'개발관련' 카테고리의 다른 글
[codility] FrogJmp (0) 2023.07.29 [개발공부] 프로그래밍 Best Practice 책 추천 목록 (0) 2023.07.28 [개발공부] Rust (0) 2023.07.28 [codility] OddOccurrencesInArray (0) 2023.07.27 [codility] BinaryGap (0) 2023.07.26