IT/Programmers

[Programmers/코딩테스트 연습] 배열회전 Java

안선생 Dr.Ahn 2022. 12. 9. 00:08
728x90
반응형

배열 회전시키기 (Java)

class Solution {
    public int[] solution(int[] numbers, String direction) {
        int len = numbers.length;
        int[] answer = new int[len];
        
        if(direction.equals("right")) {      
            answer[0] = numbers[len-1];
            for(int i = 1; i < len ; i++) {
                answer[i] = numbers[i-1];
            }

        } else {
            answer[len-1] = numbers[0];
            for(int i = 0; i < len -1; i++) {
                answer[i] = numbers[i+1];
            }
        }
        return answer;
    }
}

뭔 개똥같은 실패가 자꾸 떠서 매우 분노가 일었지만 초기화를 미친듯이 눌러대며 인간승리했다.

그래서 조금 조잡한 코드 발생..

 

 

import java.util.*;

class Solution {
    public ArrayList solution(int[] numbers, String direction) {
        ArrayList<Integer> answer = new ArrayList<Integer>();

        for(int i=0; i<numbers.length; i++){
            answer.add(numbers[i]);
        }

        int targetValue = 0;

        if(direction.equals("right")){
            answer.add(0, numbers[numbers.length-1]);
            answer.remove(answer.size()-1);

        }else{
            answer.add(numbers[0]);
            answer.remove(0);
        }

        return answer;
    }
}

알고보면 재밌는 코드! 

ArrayList에서 쓸 수 있는 add() 메소드를 이용한 코드다.

answer.add(0, numbers[len-1]) 이 부분을 보고, '그럼 answer[0]의 숫자가 바뀌는 것 아닌가?' 라고 생각했는데!

add() 메소드는 덧붙이는 것인가 보다. 그래서 기존의 answer[0] 이 answer[1]이 되고, 

remove() 메소드를 이용해 이동으로 인해 실제로 바뀐 단 하나의 숫자 위치만 삭제해버리는 것이다!

ㅎㅎ 재밌었다.

 

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(int[] numbers, String direction) {
        List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());

        if (direction.equals("right")) {
            list.add(0, list.get(list.size() - 1));
            list.remove(list.size() - 1);
        } else {
            list.add(list.size(), list.get(0));
            list.remove(0);
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

위와 비슷하지만 list와 stream을 이용한 코드.

 

그 외에는 전부 비슷비슷하다.

 

 

 

 

728x90
반응형