자바 Collections.sort를 이용한 최대,최소 값과 Collections.min,max 속도 비교
-
이번에 백준 14888번 연산자 끼워넣기라는 문제를 몇달전에 풀었었다가 이번에 2번째로 다시 풀어보았습니다.
그때 보다는 알고리즘 푸는 실력이 좀 늘었다 생각하고 풀었는데 속도가 훨씬 늦게나온거에요
그래서 코드 어느부분이 다른거지??? 하고 봤는데 기본 로직은 거의 같았습니다.
그래서 이것 저것 코드를 넣었다 뺐다 해보면서 깨달은 것이 있었습니다.
예전 코드는 ArrayList의 최대 최소 값을 구하기 위해서 Collections.max와 Collections.min을 사용했었습니다.
이번에 사용한 느린 코드는 Collections.sort를 통해 sorting을 하고 0번째와 마지막 index를 참조하여 최대 최소를 구했습니다. 다음과 같이 말이죠
// 최댓갑 구하기
// sorting하고 마지막 인덱스 참조
ArrayList<Integer> list = new ArrayList<>();
Collections.sort(list);
System.out.println(list.get(list.size()-1));
// Collections.max 이용
System.out.println(Collections.max(list));
// 최소값 구하기
Collections.sort(list);
System.out.println(list.get(0));
// Collections.min 이용
System.out.println(Collections.min(list));
채점현황을 한 번 볼까요??
똑같은 코드에 마지막에 최대 최소 구하는 부분만 바뀌었는데 걸린 시간이 2배 이상 차이납니다.
알고리즘 바꾼건 1도 없습니다..
우연일까?? 해서 조합을 구해서 해결해야 하는 스타트와 링크 문제에도 적용해 보았습니다.
여기서는 최솟값만 구해야했습니다.
최솟값만 구해서 그런지 위 문제만큼 절반이나 줄어든 것은 아니지만 확실히 많이 줄었습니다.
최댓값 까지 구하는 문제였다먄 이 문제도 절반으로 줄었을 것 같네요
이젠 list의 최대 최소 구하는 것은 Collections.max와 min만 쓰자는 결론..