값 갱신을 이용한 문제풀이

📝 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문이라 해석이 어려웠는데

알고나니 굉장히 정교하게 짜여진 풀이방법 이었다.

블로그에 써놓고 자주 이용해볼만큼 😅