Picking Numbers
값 갱신을 이용한 문제풀이
📝 Picking Numbers (20.0)
주어진 리스트 a의 원소들로 구성할 수 있는 서브 리스트들 중
리스트 각각의 모든 원소들이 뺄셈을했을때의 절대값이 모두 1보다 작거나 같은
조건을 만족하는 서브 리스트의 사이즈를 구하는것이였다.
고민끝에 풀이를 보게 됐는데 처음 보는 형태의 이중 for문이 쓰여서 당황했다.
💡 풀이
public static int pickingNumbers(List<Integer> a) {
Collections.sort(a);
int highestCount = 0;
for(int i=0; i<a.size(); i++){
int currentCount = 0;
for(int j=0; j<=i; j++){
if(Math.abs(a.get(i)-a.get(j)) <=1){
currentCount++;
if(currentCount > highestCount){
highestCount = currentCount;
}
}
}
}
return highestCount;
}
정렬된 리스트 a에서 순서대로 절댓값 비교를 하게 되는데,
자기 자신보다 작거나 같은수까지의 비교를 통해 (j=0부터 i까지의 조건으로 만들었다.)
cuurentCount 변수를 카운팅한후 highestCount 변수에 저장하는 것으로
위 조건을 만족하는지 판별한다.
조건을 만족하는 경우 정렬된 리스트에서 currentCount값이 순차적으로 커지고
이 값을 highestCount값에 갱신하여 이루어지는것이다.
소스코드를 참고했을때는 처음보는 이중 for문이라 해석이 어려웠는데
알고나니 굉장히 정교하게 짜여진 풀이방법 이었다.
블로그에 써놓고 자주 이용해볼만큼 😅