코딩놀이! 10 Days of Statistics(HackerRank)
Day 1-1: Quartiles
두 번째 문제!
Objective In this challenge, we practice calculating quartiles. Check out the Tutorial tab for learning materials and an instructional video! Task Input Format The first line contains an integer, , denoting the number of elements in the array. Constraints
Output Format Print lines of output in the following order:
Sample Input
Sample Output
Explanation . When we sort the elements in non-decreasing order, we get . It's easy to see that . As there are an odd number of data points, we do not include the median (the central value in the ordered list) in either half:
Now, we find the quartiles:
|
음 두번째 문제는 Quartiles!!! 사분위수 구하기 입니다.
제 1 사분위수, 제2사분위수, 제3사분위수를 구하면 되는 문제네요 ㅎㅎ
역시나 문제읽기는 대충 패스! 인풋 아웃풋! 샘플
그럼 바로 문제 해석 들어갑니닷!
문제해석!
1. 입력받을 숫자의 갯수를 n 입력받습니다.
2. n 개 만큼 입력 받는다.
3. 입력 받은 n 숫자의 중앙 값을 찾습니다. -> Q2!
4. n중앙값(Q2)을 기준으로 왼쪽에 있는 값들의 중앙값을 찾습니다.-> Q1!
5. n중앙값(Q2)을 기준으로 오른쪽에 있는 값들의 중앙값을 찾습니다. -> Q3!
계산식!!!
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) |
이렇게 풀면 되는 문제 입니다! ㅎㅎ
(제가 수학을 잊은지가 오래되서 잘 기억은안나지만 그래프! 를 보시면 조금더 어렵게 느껴지실거예요 ㅋㅋㅋ, 가 아니라 표를보는게 더 편해요ㅋ)
(출처: 위키미디어;https://upload.wikimedia.org/wikipedia/commons/1/1a/Boxplot_vs_PDF.svg)
역시나 그래프를 보면 어디서 본듯하지만 이해는 안됩니다 사.분.위.수.란...
그래서 준비한! 이해력을 위한 꿀팁!
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)
위 사진을 보면 바로 이해가 되실거예요 ㅎㅎ
자 이제 역시나 슈도코딩?!!!이 나름 끝났으니 끄적끄적 코딩!!!!!!
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_q = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse); if (arr_q.Length != inputCount) { Console.WriteLine("error. a lot of number"); //여기서 사실 다시 입력을 받아야겟죠? } foreach (decimal a_temp in quartiles(arr_q)) { Console.WriteLine(a_temp); } } static List<decimal> quartiles(int[] arr_q) { Array.Sort(arr_q);
decimal q1, q2, q3; int n = arr_q.Length; int q2mid = n / 2; int q1mid = (q2mid - 1) / 2; int q3mid = n - q1mid - 1; if (n % 2 == 0) { q2 = (decimal)(arr_q[q2mid] + arr_q[q2mid - 1]) / 2; if (q2mid % 2 != 0) { q1 = arr_q[q1mid]; q3 = arr_q[q3mid]; } else { q1 = (decimal)(arr_q[q1mid] + arr_q[q1mid - 1]) / 2; q3 = (decimal)(arr_q[q3mid] + arr_q[q3mid - 1]) / 2; } } else { q2 = arr_q[q2mid]; if (q2mid % 2 != 0) { q1 = arr_q[q1mid]; q3 = arr_q[q3mid]; } else { q1 = (decimal)(arr_q[q1mid] + arr_q[q1mid + 1]) / 2; q3 = (decimal)(arr_q[q3mid] + arr_q[q3mid - 1]) / 2; } } return new List<decimal> { q1,q2,q3 }; } } |
짜란 역시...엄청난 하드코딩의 느낌이 나죠...네 맞습니다 ㅋㅋㅋ 하드코딩이지만 나름 고뇌를...ㅠㅠ
코드짜실때 팁은!
n을 짝수인지 홀수 인지 판단하시고
Q2를 기준으로 왼쪽, 오른쪽에 남은게 홀수?짝수? 판단을 해주셔야해요
그리고 배열의 시작은 0번째 부터입니다!!
처음에는 list를쓸지 array를 쓸지 dictionary를 쓸지 고민했는데요
의식의 흐름일까요? 그냥 쓰던데로 쓰게 되더군요 ㅋㅋㅋ
후기!. 이전 Day 0: Weighted Mean 문제와는 다르게 처음 n을 입력받는걸 고민하다가
그냥 n보다 많으면 숫자를 많이 넣으셨어요 하게 쳤습니다. 물론 다시 입력받고 하는건 귀찮아서...ㅋㅋㅋ
일단 메인 Quartiles 를 구하는건 짜놧으니 알!아!서!되겟쥬 ㅋㅋ
역시 문제를 풀고나서
RunCode!!
Compilation Successful :)
Click the Submit Code button to run your code against all the test cases.
잘 들어갓네요 ㅎㅎㅎ
그렇타면! 자싄감을 가지고 submit!!!!!!!!!
흐흠 ㅋㅋㅋㅋ 기분이 좋네윱 오늘은 30점!! 득템입니다 ㅎㅎ
Day 1 에는 3문제가 있네요 하지만 오늘 1문제뿐.....귀차....ㄶ지는 않고요 ㅋㅋ
하루에 1개씩 풀기로했으니(?!) ㅋㅋ 그럼오늘도 이만!
(출처:https://www.hackerrank.com/challenges/s10-quartiles/problem)
'IT-Programming&+ > algorithms' 카테고리의 다른 글
코딩놀이! Day 1-3: Standard Deviation(10 Days of Statistics - HackerRank ) using C# (0) | 2018.11.02 |
---|---|
코딩놀이! Day 1-2: Interquartile Range (10 Days of Statistics - HackerRank ) using C# (0) | 2018.11.02 |
코딩놀이! Hackerank 소개 (4) | 2018.10.31 |
코딩놀이! Day 0: Weighted Mean (10 Days of Statistics - HackerRank ) using C# (0) | 2018.10.30 |
코딩놀이! 10 Days of Statistics(HackerRank) (0) | 2018.10.30 |