ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 배열 자르기, 복사, copyOfRange 사용법
    BACK-END/JAVA 2020. 10. 10. 16:32

    | 2020-10-10

    프로그래머스 코딩테스트 정렬 1번 문제를 2시간에 걸쳐 풀었다. 프로그래머스 코딩테스트는 할때마다 정말 기초적인 부분부터 다시 짚어보게하는 문제가 많다. 

     

    | 문제

     

    처음에는 다른 사람의 풀이를 보지 않으려고 30분간 전전긍긍하며 자바 내장 클래스들을 뒤져보다가 copyOfRange를 알게되었고, 자바스크립트 내장 메소드 slice 를 알게 되었다. 하지만 이렇게 갑작스럽게 알게된 기능을 어떻게 사용하면 좋을지 또 고민을 하며 1시간 30분이 지났다. 그리고 결국엔 다른 사람의 풀이를 보게되었다.

     

    | 코드

    /*
    	메인에 선언
    	int[] array = {1,5,2,6,3,7,4};
    	int[][] commands = {{2,5,3},{4,4,1},{1,7,3}};
    	solution s = new solution();
    	System.out.println(Arrays.toString(s.solution(array,commands)));
    */
    
    public int[] solution(int[] array, int[][] commands) {
            int[] answer = new int[commands.length];
            
            for(int i=0; i<commands.length; i++){
                int[] temp = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
                Arrays.sort(temp);
                answer[i]=temp[commands[i][2]-1];
            }
       return answer;
    }

     

    | 출력결과

    너무나도 짧은 코드에 놀랐다. 역시 고수일수록 코드는 짧아진다. 하지만 2시간 동안 고민을 했기 때문에 다른사람이 왜 이렇게 작성한건지 조금이나마 이해가 되었다. 그리고 내 손으로 이클립스에, 프로그래머스 에디터에, 또 이클립스에 직접 3번을 적어봤다.

     

    나도 분명히 '임시 배열을 만들어서 값을 집어넣고.. 또 start인덱스와 end인덱스를 집어넣어서 배열을 자를수 있는 어떤 메소드가 분명히 있을텐데 찾아보자!' 하면서 시작을 했는데 문제는 제대로 이해했으나 자바 내장 클래스의 이해, 풀이면에서 한참 뒤쳐진것을 느꼈다.

     

    이 문제를 풀면서 배운점은 copyOfRange 사용 방법, 2차원 배열 사용 방법, 임시 배열 temp 만들어서 사용하기가 되겠다. 역시 아는것이 힘이다. 자바 API를 틈틈히 읽어야한다는 교훈을 얻게 되었다.

     

    | 배열 출력

    System.out.println(Arrays.toString(arr));

    | copyOfRange 사용법

    Arrays.copyOfRange(array, start, end); 
    // array : 원본 배열
    // start : 복사할 시작 인덱스
    // end : 복사할 끝 인덱스

     

     

     

     

     

     

    댓글

Today
Designed by Danbee Park.