문제:
설계:
commands 배열은 이차배열이기 떄문에 이중 for문을 써야하지만 열의수는 3으로 고정되어있기때문에 for문을 하나만
사용하기로 설계하였다.
1.for문을 돌려 commands행렬의 각 행마다의 행렬을 획득한다.
2.그 행렬 안에서 첫번째성분- start포인트 , 두번째성분-end포인트 ,세번째 성분-check포인트 로 변수를 할당한다
3. for문의 마지막에서 arraylist를 선언한 후 list에 조건에 맞는 값을 넣기위해 for문을 돌려 start포인트 - end 포인트까지의 array성분을 add한다
4.완성된 list를 list.sort(null)을 이용해 오른차순으로 sort 한 후 list.get(check포인트)를 통해 arrylist에서 값을 받아와서 answer행렬에다가 저장한다.
시행착오:
1.코딩을 오랜만에 하다보니까 java의 배열 동적할당을 까먹었었다. 기존에 int [] answer = {}; 로 되어있는것을 그대로 놔두고 짜서 실행헀더니, except java.lang.ArrayIndexOutOfBoundsException 오류가 떠서 한참을 해멧는데 알고보니 answer의 크기를 정해주지않아서였다 new int[commands.length]; 를통해 commands배열의 행의 크기만큼 할당해주었다.
2.arraylist에 익숙치않아 idex값으로 성분을 가져올때 list.get(check포인트)를 썼으나 또 계속 except java.lang.ArrayIndexOutOfBoundsException 오류가 생겼다. 또 한참을 헤맷는데 list의경우에도 index값은 0부터시작해서 값을가져올때 실제로 찾을 index에 -1를 해주어야했다. TEST CASE에 크기가1인 경우도 있어서 오류가 났던것이다.
코드:
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
int start_point =0;
int end_point =0;
int check_point =0;
for(int i=0; i<commands.length; i++)
{
start_point = commands[i][0];
end_point = commands[i][1];
check_point = commands[i][2];
ArrayList<Integer> list = new ArrayList<>();
for(int k=start_point-1; k<end_point; k++)
{
list.add(array[k]);
}
list.sort(null);
answer[i] = list.get(check_point-1);
}
return answer;
}
}
결과:
한줄평: 머릿속의 생각을 코드로 구현하려면, 기본적인 문법을 잘 알아야한다. 이 문제도 문제풀이 난이도는 매우 낮았으나, 구현을 위한 함수들을 잘 몰라서 구글링하느라 오래걸렸었다. 차차 나아지겠지?...
'알고리즘 > 프로그래머스 일기' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (0) | 2020.06.01 |
---|---|
[프로그래머스] LV1-1 (0) | 2020.05.28 |
프로그래머스를 시작 (0) | 2020.05.28 |