-
[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 : 복사할 끝 인덱스
'BACK-END > JAVA' 카테고리의 다른 글
[JAVA] 삼항연산자 (ternary operator) 예제 (0) 2020.10.14 [JAVA] PriorityQueue 메소드 종류 (0) 2020.10.11 [JAVA] Scanner 값 받아서 몇시간 몇분 몇초 출력하기 (0) 2020.10.10 [JAVA] 전위증감연산자와 후위증감연산자 (0) 2020.10.10 [JAVA] 배열 선언 및 출력 (0) 2020.10.10