본문 바로가기

programming/algorithm 공부

[hackerrank] s10-basic-statistics Day 1: Quartiles

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);
    }
}

 

 

반응형