[문제보기]

 9088. 다이아몬드

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

[풀이과정]

 입력값으로 들어오는 dia의 크기를 배열로 받아서 오름차순으로 정렬을 해준다. 그 후 이중 for문을 사용하여

 기준값으로부터 한 칸씩 차이를 검사를 해서 k보다 이하가 나오면 res값을 증가해준다.

 반대로 k보다 초과 값이 나오면 break를 해주는데, 오름차순으로 정렬을 해줬기 때문에 그 뒤에 있는 데이터에 

 대해서는 신경을 안 써줘도 되기 때문이다. 

 이후 max() 함수를 사용하여 최댓값을 업데이트해준다. 

 

[소스보기]

#include <iostream>
#include <algorithm>
using namespace std;
int dia[10000];

int main(){
    cin.tie(0);
    cout.sync_with_stdio(false);

    int T;
    cin >> T;
    for(int test = 1; test <= T; test++){
        int n, k;
        cin >> n >> k;
        for(int i=0; i<n; i++){
            cin >> dia[i];
        }

        sort(dia, dia+n);

        int res, ans = 0;
        for(int i=0; i<n; i++){
            res = 1;
            for(int j = i+1; j<n; j++){
                if(dia[j] - dia[i] <= k)
                    res++;
                else
                    break;
            }
            ans = max(ans, res);
        }

        cout << "#" << test << " " << ans << "\n";

    }
}

 

[해결과정 중 실수한 부분]