1. 문제 정보
1) 링크 : https://www.hackerrank.com/challenges/s10-interquartile-range/problem
Day 1: Interquartile Range | HackerRank
Calculate the interquartile range.
www.hackerrank.com
2) 혹시 링크가 바뀔경우 문제 파일 PDF :
2. 설명
1) 요구사항
- 정의된 Quartiles 값을 출력하되 소수점 한자리수까지만 출력한다.
- 입력값은 특정 범위내 자연수이다.
2) 입력값
입력값은 세가지이다. N과 int 배열 2개가 각 배열의 원소의 값이 공백란으로 구분되어 하나씩 입력된다.
- 모두 자연수이며 {N | 5 <= N <= 50}, {x | 0 < x < 100, x ∈ X}, {f | 0 < f < 100, f ∈ F}
- 배열 X와 F의 원소 갯수는 N = n(X) = n(F).
3) 알고리즘 설명
통계/분석을 하기 위해 배우는 기초적인 수학적 지식을 설명하고 이를 구현하는 내용이다.
여기서 주어지는 배열 F는 X데이터에 대한 빈도수(frequence)를 나타낸다. 재해석이 필요하다. 다시말해 입력데이터는 RAW값을 빈도수에 따라 정리한 가공정보가 되고 나는 이를 다시 RAW로 풀어 Median을 구하고자 한다.
요구되는 Quartiles 출력은 앞서 풀이한 Day 1 - Quartiles와 동일하다.
전체 소스 :
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static double getMiddleValue(int[] x)
{
if(x == null) return 0;
if(x.length < 1) return 0;
return (x.length%2==0 ? (x[x.length/2-1]+x[x.length/2])/2.0 : x[x.length/2]);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String tmp = sc.nextLine();
int N = Integer.parseInt(tmp);
int[] x = new int[N];
int[] f = new int[N];
int maxLen = 0;
for(int inx=0; inx<N; inx++)
{
x[inx] = sc.nextInt();
}
for(int inx=0; inx<N; inx++)
{
f[inx] = sc.nextInt();
maxLen = maxLen + f[inx];
}
int[] fx = new int[maxLen];
for(int inx=0, pt=0; inx<maxLen; inx++)
{
if(f[pt] > 0) f[pt]--; else { pt++;f[pt]--; }
fx[inx] = x[pt];
}
Arrays.sort(fx);
int[] lowerx = new int[maxLen/2];
int[] upperx = new int[maxLen/2];
for(int inx=0; inx<maxLen; inx++)
{
if(maxLen%2==1 && maxLen/2==inx) continue;
if(maxLen/2.0 > inx)
lowerx[inx] = fx[inx];
else
upperx[inx-(maxLen%2==1?maxLen/2+1:maxLen/2)] = fx[inx];
}
System.out.printf("%.1f",getMiddleValue(upperx)-getMiddleValue(lowerx));
}
}
'programming > algorithm 공부' 카테고리의 다른 글
[hackerrank] s10-basic-statistics Day 1: Quartiles (0) | 2020.01.09 |
---|---|
[hackerrank] s10-basic-statistics Day 0 - Weighted Mean (0) | 2020.01.08 |
[hackerrank] s10-basic-statistics Day 0 - Mean, Median, and Mode (0) | 2020.01.08 |
[Algorithm] big O (25 days : Running Time and Complexity) (0) | 2018.02.09 |
[Algorithm] BT (Binary Tree) & BST (Binary Search Trees) (0) | 2018.02.09 |