코딩놀이! 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 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 . Constraints
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
Sample Output
Explanation The given data is: 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:
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, 8Put them in order: 2, 4, 4, 5, 6, 7, 8 Cut the list into quarters: And the result is:
|
n이 짝수일 경우 Example: 1, 3, 3, 4, 5, 6, 6, 7, 8, 8The numbers are already in order Cut the list into quarters: In this case Quartile 2 is half way between 5 and 6: Q2 = (5+6)/2 = 5.5 And the result is:
|
(출처: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. |
음~~~좋아좋아~~~
submit!!!!!!!!!
흐흠 ㅋㅋㅋㅋ 역시 좋아좋아 ㅋㅋㅋ 이번 Testcase는 6개나 되네요.
사실 문제 풀다가 제일 싫은게 Testcae 0부터 9까지 통과인데 Testcase10이 통과하지 못하면
정말...세젤귀... 세상에서 제일 귀찮은 에러가 나죠... 보통 저런경우 타입문제가 대부분이지만요 ㅋㅋ
Hackerrank에서는 가~~~~~~~~~~~~~~끔 말도안되는 큰 값을 넣어주는 경우가 발생하거든요 ㅋㅋㅋ
뭐 어쨋든 오늘(?..12시넘었구나..?)도 한문제 Clear!!!입니다.
그럼 오늘도 이만!!!
(출처:https://www.hackerrank.com/challenges/s10-interquartile-range/problem)
'IT-Programming&+ > algorithms' 카테고리의 다른 글
코딩놀이! Day 2-1: Basic Probability(10 Days of Statistics - HackerRank ) (0) | 2018.11.03 |
---|---|
코딩놀이! Day 1-3: Standard Deviation(10 Days of Statistics - HackerRank ) using C# (0) | 2018.11.02 |
코딩놀이! Day 1-1: Quartiles (10 Days of Statistics - HackerRank ) using C# (0) | 2018.11.01 |
코딩놀이! Hackerank 소개 (4) | 2018.10.31 |
코딩놀이! Day 0: Weighted Mean (10 Days of Statistics - HackerRank ) using C# (0) | 2018.10.30 |