문제
https://www.acmicpc.net/problem/2587
코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);
// 평균 계산
const average = Math.floor(input.reduce((acc, cur) => acc + cur, 0) / input.length);
// 중앙값 계산
input.sort((a, b) => a - b);
const median = input[2]; // 5개의 숫자에서 중앙값은 항상 인덱스 2
// 결과 출력
console.log(average);
console.log(median);
코드설명
fs.readFileSync('/dev/stdin').toString().split('\n').map(Number)을 사용하여 Node.js 환경에서 표준 입력을 통해 데이터를 읽어온 데이터를 문자열로 변환하고, 줄바꿈으로 분리한 후 각각의 값을 숫자로 변환해줍니다.
그 다음 reduce((acc, cur) => acc + cur, 0)에서 배열의 모든 요소를 더해줍니다. 그 후 배열의 모든 요소를 더해 준 값을 Math.floor(...)에서 평균을 계산 하는데 소수점 아래를 버려주고, input.sort((a, b) => a - b)에서 배열을 숫자 오름차순으로 정렬해준 뒤, input[Math.floor(input.length / 2)]에서 정렬된 배열에서 중간 위치의 값을 선택하여 중앙값으로 사용해줍니다.
문제 풀이
이 문제는 주어진 다섯 개의 자연수로부터 평균과 중앙값을 계산하는 간단한 문제입니다.
배열에 저장된 모든 수의 합을 구하고, 이를 수의 개수로 나누어 평균을 구하여 배열을 오름차순으로 정렬한 후, 중앙값을 계산할 때
5개의 수가 주어지므로, 정렬 후 항상 인덱스 2의 값을 선택합니다.
시간 복잡도
reduce() 함수를 사용하여 배열의 모든 요소를 합산하는데, 이는 O(N) 시간이 걸립니다.
여기서 N은 배열의 길이를 의미하고, 문제에서는 5개의 수만 주어지기 때문에 N = 5가 됩니다.
그리고 sort() 함수를 사용하여 배열을 정렬하는데, 일반적인 정렬 알고리즘의 시간 복잡도는 O(N log N)입니다.
여기서 배열의 길이가 5로 고정되어있기 떄문에 실제 수행 시간에 큰 부담이 되지 않는 수치입니다.
그러므로 전체적인 코드의 시간 복잡도는 O(N log N)이 됩니다.
공간 복잡도
주어진 5개의 숫자를 저장하는데 필요한 공간이 O(N)입니다. 여기서 N은 배열의 길이로 여기에서는 5가 됩니다.
그리고 average와 median을 계산하고 저장하는 데 사용되는 변수는 상수 공간(O(1))을 차지하게 됩니다.
따라서 전체 공간 복잡도는 입력 배열에 의해 주도되므로 O(N)입니다
'하루 알고리즘(JS)' 카테고리의 다른 글
[바미] 수 정렬하기 2 (0) | 2024.04.25 |
---|---|
[바미] 커트라인 (0) | 2024.04.24 |
[바미] 수 정렬하기 (0) | 2024.04.22 |
[바미] 설탕 배달 다국어 (0) | 2024.04.21 |
[바미] 영화감독 숌 (0) | 2024.04.19 |