하루 알고리즘(JS)

[바미] 통계학

Bami 2024. 8. 29. 14:20
728x90
반응형

문제

 

https://www.acmicpc.net/problem/2108https://www.acmicpc.net/problem/26069

코드

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const N = parseInt(input[0], 10);
const connections = input.slice(1);

const danceSet = newSet(); // Set을 생성할 때 new Set()으로 생성합니다.
danceSet.add('ChongChong');

// 각 사람의 연결 관계를 탐색for (let i = 0; i < N; i++) {
    const [A, B] = connections[i].split(' ');

    // A 또는 B가 무지개 댄스를 추고 있으면, 다른 사람도 추게 된다.if (danceSet.has(A) || danceSet.has(B)) {
        danceSet.add(A);
        danceSet.add(B);
    }
}

console.log(danceSet.size);

문제 해설

이 문제는 기본적인 통계값을 계산하는 문제로 다음 네 가지 통계값을 구해야 하는 문제입니다.

 

  • 산술평균: 주어진 N개의 수의 합을 N으로 나눈 값
    • 이 값은 소수점 첫째 자리에서 반올림하여 출력해야 함.
  • 중앙값: 주어진 N개의 수를 오름차순으로 정렬했을 때, 가운데 위치하는 값.
    • 문제에서 N이 홀수라고 명시되어 있으므로, 항상 중간 위치에 하나의 값이 존재함.
  • 최빈값: 주어진 N개의 수 중에서 가장 자주 나타나는 값을 의미.
    • 여러 개의 최빈값이 있을 경우, 두 번째로 작은 값을 출력해야 함.
  • 범위: 주어진 N개의 수 중 최댓값과 최솟값의 차이.

시간 복잡도

시간 복잡도는 알고리즘이 입력의 크기에 따라 얼마나 빠르게 실행되는지를 나타냅니다

 

4가지 통계값에 대한 시간 복잡도를 계산해야합니다.

 

  • 산술평균
    • 숫자들의 합을 계산하는 데 걸리는 시간은 O(N)이 걸림.
  • 중앙값
    • 배열을 정렬하는 데 걸리는 시간은 O(N log N).
    • 중간 값을 찾는 데 걸리는 시간은 O(1).
    • 따라서, 중앙값을 계산하는 시간복잡도는 O(N log N)가 됨.
  • 최빈값
    • 주어진 숫자들의 빈도를 계산하는 데 걸리는 시간은 O(N).
    • 빈도를 확인하고 최빈값을 찾는 데 걸리는 시간도 O(N).
    • 최빈값 후보군을 정렬하는 데 걸리는 시간은 O(k log k)임. 여기서 k는 고유한 숫자의 개수.
      최악의 경우 k는 N과 같으므로 O(N log N)가 됨.
  • 범위
    • 이미 배열이 정렬된 상태이기 때문에 가장 첫 번째와 마지막 원소만 확인하면 됨. 따라서 배열의 최댓값과 최솟값을 찾는 시간은 O(1).

따라서 이 코드의 전체 시간복잡도는 정렬을 포함하기 때문에 O(N log N)가 됩니다.

 

공간 복잡도

공간 복잡도는 알고리즘이 얼마나 많은 메모리 공간을 사용하는지 나타냅니다.

 

마찬가지로 4가지 통계값에 대한 공간 복잡도를 계산해야합니다.

 

  • 산술평균
    • 숫자들의 합을 저장하기 위해 O(1)의 추가 공간이 필요함
  • 중앙값
    • 정렬된 배열을 사용하지만 입력 데이터 자체에서 정렬되어 추가적인 공간을 사용하지 않기 때문에 공간복잡도는 O(1)이 됨.
  • 최빈값
    • 빈도를 저장하기 위해 Map을 사용함. 최악의 경우 모든 숫자가 고유한 값을 가지면 Map은 N개의 항목을 저장해야 하기 때문에 공간복잡도는 O(N).
  • 범위
    • 정렬된 배열에서 최댓값과 최솟값을 찾기 위해 추가적인 공간이 필요하지 않기 때문에 공간복잡도는 O(1).

따라서 이 코드의 공간복잡도는 O(N)입니다.

 

728x90
반응형