CodeWars 일백 열 여덞 번째 문제
Updated:
Pick peaks
public static Map<String,List<Integer>> getPeaks(int[] arr) {
Map<String,List<Integer>> map = new HashMap<String,List<Integer>>();
List<Integer> posS = new ArrayList<Integer>();
List<Integer> peaksS = new ArrayList<Integer>();
for(int j = 0, i = 1, k = 2; i < arr.length - 1; j++, i++, k++) {
if(arr[j] < arr[i] && arr[i] > arr[k]) {
posS.add(j+1);
peaksS.add(arr[j+1]);
} else if(arr[j] < arr[i] && arr[i] == arr[k]) {
j--;
} else {
j = i-1;
}
}
map.put("pos", posS);
map.put("peaks", peaksS);
return map;
}
- 나의 경우 배열을 비교할 index 변수를 3개를 사용했다.
- 그러나 Best 코드의 경우 Boolean 변수를 통해서 전, 후 값을 비교하여 넣었다.
- Best 코드가 더 깔끔한 것 같다.
public static Map<String,List<Integer>> getPeaks(int[] arr) {
Map<String,List<Integer>> ans = new HashMap<String,List<Integer>>() ;
int posMax = 0;
boolean matchAsc = false;
for (int i = 1 ; i < arr.length ; i++) {
if (arr[i-1] < arr[i]) {
matchAsc = true;
posMax = i;
}
if (matchAsc && arr[i-1] > arr[i]) {
matchAsc = false;
ans.get("pos").add(posMax);
ans.get("peaks").add(arr[posMax]);
}
}
return ans;
}