본문 바로가기
Algorithm

[Algorithm] K번째 숫자

by dev_Step 2022. 6. 1.

프로그래머스[초급] 

문제는 1개의 배열과, 1개의 2차원 배열이 주어지며, 

2차원배열에서는 { {i,j,k},{4,7,5}, {1,6,4} }; 다음과 같이 숫자가 주어지며, 

array의 i번쨰 부터 j 번재까지를 새로운 배열로 생성 후 정렬한다음에 k번째 가 무엇인지

리턴하시요.

 

나의 풀이 방법으로는 ..

1. 우선 리턴되야 하는 answer의 배열의 크기는 commands의 길이와 같으므로 answer의 크기를 commands의 길이로 설정했다.

2. array배열의  i ~ j 까지 요소를 담을 sort를 선언하고

3. num , check 를 선언하여 sort의 배열요소를 하나씩 저장할떄 사용하고, answer에 k번쨰를 담을때 사용하였다.

4. commands는 2차원 배열로 향상된 for문을 통해서 1차원 배열 들을 하나씩 꺼내서 i, j, k 번째 값을 사용하였다.

5. num은 one[]의 요소들이 한번씩 돌때마다 0으로 초기화 시켜주었다.

6.sort[] 의경우  commands의 시작~끝 까지의 숫자의 차보다 +1 만큼의 크기로 향상된 for문 안에서 선언하여 one[] 의 요소가 달라질떄마다 다른 크기의 배열이 생성되도록 하였다.

 

 

============================================================================================

여기서 의문점이 들었던것 중에 하나가

코드를 직접 내가 다 만들어서 사용하는게 좋은 풀이 방법인지.. 아니면 정의되어 있는 함수를 사용해서 풀이하는게 좋은건지 모르겠다.

다른 사람의 풀이를 보면 copyOfRange 라는 함수를 사용하였는데 딱 문제의 처음보고나서

array 배열을 i~j번쨰 까지 짤라주는 함수가 없나 했더니 있었다..  짜르다기 보다 i~j까지 복사해주는 함수지만 말이다.

 Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);

Arrays.copyOfRange(array[], int from, int to);

array[] 배열을  from 숫자부터 to 숫자 전까지 복사해서 새로운 배열로 리턴해준다.,