빠똥빠똥
2108번 통계학(정렬) - ☆ 본문
#문제링크 : https://www.acmicpc.net/problem/2108
<전략>
1. 최빈값 계산을 편리하게 하고 더 적은 시간복잡도로 문제를 해결하기 위해 카운팅 정렬처럼 각 숫자를 입력받아 숫자들을 a배열의 인덱스로 취급한다. 단, 절대값이 4000이라 음수값이 나올 수 있으므로 -4000에 대비해 각 숫자들에 4000을 더한 후 a배열의 인덱스로 취급한다. 그리고 해당 인덱스의 배열 값을 하나 증가시킨다.
2. 평균값은 처음 입력을 받으면서 총합을 미리 계산해주고, 최빈값은 a배열값중 가장 큰값을 mx변수에 저장한 후 다시 반복문을 돌면서 a배열에서 mx와 값이 같으면 fre에 인덱스-4000(처음에 4000 더해줬으므로)값을 저장한다. 만약 최빈값이 여러개라면 cnt변수가 2가 될때 멈추도록 한다. 중앙값은 다시 cnt변수를 0으로 초기화하고 a[0]부터 a[8000]까지 카운트를 누적합한다. 누적합 진행중 cnt값이 n/2 + 1보다 (n은 항상 홀수이므로) 같거나 커지는 순간의 인덱스를 중앙값으로 저장한다.
3. 범위는 처음 a[i]값이 0이 아닌값이 나오면 start에 i-4000을 저장하고, 다시 반복문을 돌려 cnt를 0으로 초기화하고 누적합을 계산후 cnt값이 n보다 같거나 커지면 end에 i-4000을 저장한다. ran(범위)는 end - start이므로 해당 값을 출력한다.
'백준' 카테고리의 다른 글
15650번 N과 M(2)(DFS, 백트래킹) (0) | 2020.07.16 |
---|---|
10814번 나이순 정렬(stable sort) - ☆ (0) | 2020.07.15 |
1018번 체스판 다시 칠하기(브루트 포스) - ☆ (0) | 2020.07.14 |
2231번 분해합(브루트 포스) - ☆ (0) | 2020.07.14 |
2798번 블랙잭(브루트 포스) (0) | 2020.07.14 |