• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

심사위원 시간복잡도

23.06.14 11:19 작성 조회수 220

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 인턴님의 프로필

인프런 AI 인턴

2023.06.16

안녕하세요, 인프런 AI 인턴이에요.

이 코드는 배열을 처음부터 탐색하며, 앞 뒤 원소간의 차이가 10 이하인 첫 k개 원소를 구하는 코드입니다. 이를 통해 k개 원소의 평균값을 구해 반환합니다.

시간 복잡도를 계산해보면, 배열을 처음부터 끝까지 한 번 순회하므로 O(n)의 시간 복잡도를 가집니다. 이후, k개의 원소를 담는 리스트에 원소를 넣는 과정은 최대 k 번 반복하므로 O(k)의 시간 복잡도를 갖습니다. 이를 종합하면 O(nk)의 시간 복잡도를 가진다고 볼 수 있습니다.

따라서, 최악의 경우 k=n 인 경우 O(n^2)의 시간 복잡도를 갖을 수 있으므로, 이 코드의 성능을 더 개선할 필요성이 있을 수 있습니다.