반응형

코딩놀이! 10 Days of Statistics(HackerRank)

 Day 1-2: Quartiles


세 번째 문제!

(오늘은...잠안오는김에! 노트북을 켰습니다 ㅎㅎ)

 Objective 

In this challenge, we practice calculating the interquartile range. We recommend you complete the Quartiles challenge before attempting this problem.

Task 
The interquartile range of an array is the difference between its first () and third () quartiles (i.e., ).

Given an array, , of  integers and an array, , representing the respective frequencies of 's elements, construct a data set, , where each  occurs at frequency . Then calculate and print 's interquartile range, rounded to a scale of  decimal place (i.e.,  format).

Tip: Be careful to not use integer division when averaging the middle two elements for a data set with an even number of elements, and be sure to not include the median in your upper and lower data sets.

Input Format

The first line contains an integer, , denoting the number of elements in arrays  and 
The second line contains  space-separated integers describing the respective elements of array 
The third line contains  space-separated integers describing the respective elements of array .

Constraints

  • , where  is the  element of array .
  • , where  is the  element of array .
  • The number of elements in  is equal to .

Output Format

Print the interquartile range for the expanded data set on a new line. Round your answer to a scale of  decimal place (i.e., format).

Sample Input

6
6 12 8 10 20 16
5 4 3 2 1 5

Sample Output

9.0

Explanation

The given data is:

InterquartileRange

First, we create data set  containing the data from set  at the respective frequencies specified by 

As there are an even number of data points in the original ordered data set, we will split this data set exactly in half:

Lower half (L): 6, 6, 6, 6, 6, 8, 8, 8, 10, 10

Upper half (U): 12, 12, 12, 12, 16, 16, 16, 16, 16, 20

Next, we find . There are  elements in  half, so  is the average of the middle two elements:  and . Thus, .

Next, we find .There are  elements in  half, so  is the average of the middle two elements:  and . Thus, .

From this, we calculate the interquartile range as  and print  as our answer.


음 두번째 문제는  Interquartile Range!!! 중앙값? 구하기 ㅎㅎ(Day 1일차에 quartiles랑 비슷하네요. 아니 똑같네요 ㅋㅋ)

Q1과 Q3 구하기!

역시나 문제읽기는 대충 패스! 인풋 아웃풋! 샘플


그럼 바로 문제 해석 들어갑니닷!


문제해석!

1. 입력받을 숫자의 갯수를 n 입력받습니다.

2. n 개 만큼 입력 받는다.

3. 입력 받은 n 숫자의 중앙 값을 찾습니다.

4. n중앙값(Q2)을 기준으로 왼쪽에 있는 값들의 중앙값을 찾습니다.-> Q1!

5. n중앙값(Q2)을 기준으로 오른쪽에 있는 값들의 중앙값을 찾습니다. -> Q3!

6. Q3 뺴기 Q1을 출력합니다.

계산식!!!

1. n가 짝수 인지 홀수 인지 확인!(if(n%2==0))

* (여기서 잠깐!. % 는 mod 를 나타냅니다 만약(if) n을 2로 나눠서 나머지가 0인가? 라는 질문에서 0이면 짝수!, 0이아니면 홀수 겟죠??)*

 짝수인 경우(ex.1, 2, 3, 4, 5, 6)

홀수인경우 (ex. 1,2,3,4,5)

 2.중앙(3.5)에서 왼쪽(3)+오른쪽(4) 값을 2로나누면 Q2(3.5)

 3. 3.5의 왼쪽 값 1, 2, 3 의 중앙값은 Q1(2)

 4. 3.5의 오른쪽 값 4, 5, 6 의 중앙값은 Q3(5)

 2. 중앙의 값은 Q2(3)

 3. 중앙(3) 왼쪽 값 1,2 의 중앙값은 Q1(1.5 )

 4. 중앙(3) 오른쪽 값 4,5의 중앙값은 Q3(4.5)

이렇게 풀면 되는 문제 입니다! ㅎㅎ

-----------------------------------------------여기까지 복붙'S  같은 문제니깐요 ㅎㅎ

하지만 이전 글을 못 보신 분을 위해 다시한번 복붙'S! 게시글 우려먹기'S

그래서 준비한! 이해력을 위한 꿀팁!

 n이 홀수일 경우!

Example: 5, 7, 4, 4, 6, 2, 8

Put them in order: 2, 4, 4, 5, 6, 7, 8

Cut the list into quarters:

Quartiles of 2, 4, 4, 5, 6, 7, 8

And the result is:

  • Quartile 1 (Q1) = 4
  • Quartile 2 (Q2), which is also the Median, = 5
  • Quartile 3 (Q3) = 7


 n이 짝수일 경우

Example: 1, 3, 3, 4, 5, 6, 6, 7, 8, 8

The numbers are already in order

Cut the list into quarters:

Quartiles

In this case Quartile 2 is half way between 5 and 6:

Q2 = (5+6)/2 = 5.5

And the result is:

  • Quartile 1 (Q1) = 3
  • Quartile 2 (Q2) = 5.5
  • Quartile 3 (Q3) = 7

(출처:mathsisfun, http//www.mathsisfun.com/data/quartiles.html)


이번 문제에서는 Q1과 Q3 만 구하라고 하네요 ㅎㅎ 

(도대체 왜 !!! 왜!!!!!! 문제를 나눠놨지?? 수학왕님들은 댓글좀 달아서 차이좀 알려줍숑)


바로! 코딩 들어갈게윱

 class Solution {

    static void Main(String[] args)

    {

        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution */

        int inputCount = Convert.ToInt32(Console.ReadLine());

        int[] arr_Element = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);

        int[] arr_Frequency = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);

        Console.WriteLine(interquartileRange(arr_Element, arr_Frequency));

    }

    static string interquartileRange(int[] arr_Element, int[] arr_Frequency)

    {

        if (arr_Element.Length != arr_Frequency.Length)

        {

            //return fail;

        }


        List<int> dataSet = new List<int>();


        int count = 0;

        foreach (int element in arr_Element)

        {

            for (int i = 0; i < arr_Frequency[count]; i++)

            {

                dataSet.Add(element);

            }

            count++;

        }

        dataSet.Sort();


        int middle = dataSet.Count / 2;

        int lowerMiddle = middle / 2;

        int upperMiddle = (dataSet.Count) - lowerMiddle-1;

        decimal result, lowerHarf, upperHarf;

        if ((dataSet.Count) % 2 == 0)

        {

            if (middle % 2 == 0)

            {

                lowerHarf = (decimal)(dataSet[lowerMiddle] + dataSet[lowerMiddle - 1]) / 2;

                upperHarf = (decimal)(dataSet[upperMiddle] + dataSet[upperMiddle + 1]) / 2;

            }

            else

            {

                lowerHarf = dataSet[lowerMiddle];

                upperHarf = dataSet[upperMiddle];

            }   

        }

        else

        {

            if (middle % 2 == 0)

            {

                lowerHarf = (decimal)(dataSet[lowerMiddle] + dataSet[lowerMiddle - 1]) / 2;

                upperHarf = (decimal)(dataSet[upperMiddle] + dataSet[upperMiddle + 1]) / 2;

            }

            else

            {

                lowerHarf = dataSet[lowerMiddle];

                upperHarf = dataSet[upperMiddle];

            }

        }

        return String.Format("{0:0.0}", (upperHarf - lowerHarf));

    }

}


이전 문제랑 같은 소스;;;기때문에 별다를게 없네요 ㅎㅎ


오늘의 글은 회식후 의식의 흐름에 맞춰 쓰는중입니다..ㅠㅠ


후기!. 이전  Day 1: Quartiles 사분위수 구하기 문제와 같음! 뭐 수학적 의미는 모름!


그뒤!

RunCode!!

Congratulations!

You have passed the sample test cases. Click the submit button to run your code against all the test cases.

Input (stdin)
6
6 12 8 10 20 16
5 4 3 2 1 5
Your Output (stdout)
9.0
Expected Output 9.0 


음~~~좋아좋아~~~


submit!!!!!!!!!

Congratulations
You solved this challenge. Would you like to challenge your friends?
Input (stdin)Download
6
6 12 8 10 20 16
5 4 3 2 1 5
Expected OutputDownload
9.0
Compiler Message Success 


흐흠 ㅋㅋㅋㅋ 역시 좋아좋아 ㅋㅋㅋ 이번 Testcase는 6개나 되네요.

사실 문제 풀다가 제일 싫은게 Testcae 0부터 9까지 통과인데 Testcase10이 통과하지 못하면

정말...세젤귀... 세상에서 제일 귀찮은 에러가 나죠... 보통 저런경우 타입문제가 대부분이지만요 ㅋㅋ

Hackerrank에서는 가~~~~~~~~~~~~~~끔 말도안되는 큰 값을 넣어주는 경우가 발생하거든요 ㅋㅋㅋ


뭐 어쨋든 오늘(?..12시넘었구나..?)도 한문제 Clear!!!입니다.

그럼 오늘도 이만!!!


(출처:https://www.hackerrank.com/challenges/s10-interquartile-range/problem)

반응형

+ Recent posts