작성
·
298
0
이렇게 작성했는데, 시간 복잡도에 걸리지 않게 작성한것이 맞나요??
import java.util.*;
class Main {
public int solution(int[] score, int k){
int answer = 0;
Arrays.sort(score);
int sum=0;
ArrayList<Integer> ans = new ArrayList<>(); //k개 원소를 담을 리스트
for(int i=0; i<score.length; i++) { //배열을 처음부터 탐색한다.
int diff = score[i+k-1] - score[i]; //앞 뒤 원소의 차이를 구한다.
if(diff<=10) { //만약 그 차이가 10이하이면
int cnt=0; //개수를 세기위한 변수
int j=i; //i번째 원소부터 시작해서 리스트에 담는다.
while(true) { //10이하의 경우에서 제일 첫번째로 찾는게 정답이다.
if(cnt==k) break; //k개만큼 담았으면 반복문 멈춘다.
ans.add(score[j++]); //답에 해당하는 원소들을 ans에 담아준다.
cnt++;
}
break;
}
}
sum=0; //원소들의 합계를 구하기 위한 변수
for(int i=0; i<ans.size(); i++) {
sum+=ans.get(i);
}
answer = (int)sum/k;
return answer;
}
public static void main(String[] args){
Main T = new Main();
System.out.println(T.solution(new int[]{99, 97, 80, 91, 85, 95, 92}, 3));
System.out.println(T.solution(new int[]{92, 90, 77, 91, 70, 83, 89, 76, 95, 92}, 4));
System.out.println(T.solution(new int[]{77, 88, 78, 80, 78, 99, 98, 92, 93, 89}, 5));
System.out.println(T.solution(new int[]{88, 99, 91, 89, 90, 72, 75, 94, 95, 100}, 5));
}
}
답변 2
0
0
안녕하세요, 인프런 AI 인턴이에요.
이 코드는 배열을 처음부터 탐색하며, 앞 뒤 원소간의 차이가 10 이하인 첫 k개 원소를 구하는 코드입니다. 이를 통해 k개 원소의 평균값을 구해 반환합니다.
시간 복잡도를 계산해보면, 배열을 처음부터 끝까지 한 번 순회하므로 O(n)의 시간 복잡도를 가집니다. 이후, k개의 원소를 담는 리스트에 원소를 넣는 과정은 최대 k 번 반복하므로 O(k)의 시간 복잡도를 갖습니다. 이를 종합하면 O(nk)의 시간 복잡도를 가진다고 볼 수 있습니다.
따라서, 최악의 경우 k=n 인 경우 O(n^2)의 시간 복잡도를 갖을 수 있으므로, 이 코드의 성능을 더 개선할 필요성이 있을 수 있습니다.