1. 문제 정보
1) 링크 : https://www.hackerrank.com/challenges/s10-quartiles/problem
Day 1: Quartiles | HackerRank
Calculate quartiles for an array of integers
www.hackerrank.com
2) 혹시 링크가 바뀔경우 문제 파일 PDF :
s10-quartiles-English.pdf
0.27MB
2. 설명
1) 요구사항
- Median을 기준으로 보다 작거나 큰 배열에서 각각 Median을 찾아 출력한다.
- 입력값은 특정 범위내 자연수이다.
2) 입력값
입력값은 두가지이다. N과 int 배열 1개가 배열 원소의 값이 공백란으로 구분되어 하나씩 입력된다.
- 모두 자연수이며 {N | 5 <= N <= 50}, {x | 0 < x <= 100, x ∈ X}
- 배열 X의 원소 갯수는 N = n(X).
3) 알고리즘 설명
통계/분석을 하기 위해 배우는 기초적인 수학적 지식을 설명하고 이를 구현하는 내용이다.
전체 배열의 중간값(Median)를 구하고 그 값을 기준으로 보다 작거나 큰 원소들을 나누어 중간값을 구하면 된다.
전체 소스 :
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static int 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 : 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];
for(int inx=0; inx<N; inx++)
{
x[inx] = sc.nextInt();
}
Arrays.sort(x);
int[] lowerx = new int[N/2];
int[] upperx = new int[N/2];
for(int inx=0; inx<N; inx++)
{
if(N%2==1 && N/2==inx) continue;
if(N/2.0 > inx)
lowerx[inx] = x[inx];
else
upperx[inx-(N%2==1?N/2+1:N/2)] = x[inx];
}
int q1 = getMiddleValue(lowerx)
, q2 = getMiddleValue(x)
, q3 = getMiddleValue(upperx);
System.out.printf("%d\n%d\n%d\n",q1,q2,q3);
}
}
반응형
'programming > algorithm 공부' 카테고리의 다른 글
[hackerrank] s10-basic-statistics Day 1 - Interquartile Range (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 |