알고리즘 공부

[HackerRank] ctci-array-left-rotation java 풀이

철매존 2024. 11. 8. 06:56
728x90

문제 설명

1. 배열의 요소들을 왼쪽으로 돌리는거다.

2. 그리고 맨 뒤에 애는 오른쪽 끝으로 가는식

 

 

풀이 과정

 1. 딱히 어려운 문제는 아니지만, 성능에 이슈가 있을 수 있다.

 2. 간단하게 말하면 어디까지 가야할지를 확인하고 돌리면 된다.

 3. 근데 그거를 매번 돌릴 필요 없고 얼마나 가면 되는지 알면 되는데, 어차피 배열 전체 크기는 정해져 있으니 갈 거리에서 배열크기 나머지를 구하면 이동한 변위가 된다.

 

    public static List<Integer> rotLeft(List<Integer> a, int d) {
        int maxLength = a.size();
        
        d %= maxLength;
        List<Integer> ans = new ArrayList<>(Collections.nCopies(maxLength, 0));
        
        for(int i=0; i<maxLength; i++) {
            int index = i - d;
            if(index<0) index += maxLength;
            ans.set(index, a.get(i));
        }
        
        return ans;
    }