-
[BOJ/Swift] 통계학 2108Legacy/Be Refactoring.. 2021. 9. 13. 01:22728x90
Baekjoon Online Judge
단계별로 풀어보기 / 정렬 / 통계학 2108
문제에 모든 정보 및 저작권 https://www.acmicpc.net/
Todo:
수를 처리하는 것은 통계학에서 상당히 중요한 일이다.
통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다.
단, N은 홀수라고 가정하자.산술평균 : N개의 수들의 합을 N으로 나눈 값
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
최빈값 : N개의 수들 중 가장 많이 나타나는 값
범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.Constraints:
입력 제약:
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다.
단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다.
입력되는 정수의 절댓값은 4,000을 넘지 않는다.출력 제약:
첫째 줄에는 산술평균을 출력한다.
소수점 이하 첫째 자리에서 반올림한 값을 출력한다.둘째 줄에는 중앙값을 출력한다.
셋째 줄에는 최빈값을 출력한다.
여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.넷째 줄에는 범위를 출력한다.
Input-Output
(출처: https://www.acmicpc.net/problem/2108)Solution.swift
import Foundation let caseCount = Int(readLine()!)! var nums = [Int:Int](), sortedNums = [Int]() for _ in 0..<caseCount { let inputNum = Int(readLine()!)! if !nums.keys.contains(inputNum) { nums.updateValue(1, forKey: inputNum) } else { nums[inputNum]? += 1 } } nums.sorted(by: { $0.key < $1.key }).forEach { element in for _ in 0..<element.value { sortedNums.append(element.key) } } let sum = sortedNums.reduce(0, +) print(String(format: "%.0f", Double(sum)/Double(caseCount))) print(sortedNums[sortedNums.count/2]) let sorted = nums.filter{ $0.value == nums.values.max()! }.sorted(by: { $0.key < $1.key }) print(sorted.count < 2 ? sorted[0].key : sorted[1].key) print(sortedNums[sortedNums.count-1] - sortedNums[0])
github Code Repository
How I tried this:
문제 자체가 어렵진 않은데 최빈값을 구하는 점 때문에 방향을 고민했다.
중복된 수의 횟 수를 체크하려고 처음 딕셔너리를 생각했는 데
중앙값은 keys의 가운데 값이 아니기 때문에 중복된 경우를 나열하는 배열도 필요했다.
문제를 애초에 배열과 중복 탐색이려나 생각했지만두 개를 동시에 생성하는 방향을 생각했다.
빈도를 구하기위해 딕셔너리로 key-숫자 value-빈도를
입력시 저장하고정렬을 하며 모든 값을 표현하는 배열만들고
정렬된 최소 최대, 중앙값을 얻음.What I got is:
I have to study:
문제에 관한 모든 저작권 : https://www.acmicpc.net/
728x90'Legacy > Be Refactoring..' 카테고리의 다른 글
[BOJ/Swift] 좌표 정렬하기 11650 (0) 2021.09.12 [BOJ/Swift] 단어 정렬 1181 (0) 2021.09.12 [BOJ/Swift] 나이순 정렬 10814 (0) 2021.09.12 [BOJ/Swift] 좌표 압축 18870 (0) 2021.09.12 [BOJ/Swift] 좌표정렬하기 2 11651 (0) 2021.09.12