[BOJ] Java - 2108번 문제풀이(통계학)

2023. 3. 3. 22:32·개발자 세릴리/코딩테스트
728x90
반응형

BeakJoon 백준 2108번 통계학(Java)

 

시간 제한 메모리 제한 정답 비율
2 초 256 MB 25.538%
 

[문제]

수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.

  1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
  2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
  3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
  4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이

N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.

 

[입력]

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

 

[출력]

첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.

둘째 줄에는 중앙값을 출력한다.

셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.

넷째 줄에는 범위를 출력한다.

 

[풀이]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        List<Integer> numList = new ArrayList<>();
        List<Integer> sortedNum = new ArrayList<>();
        int sum = 0;
        int[] cntFrequent = new int[8001];
        for(int i=0; i<N; i++) {
            int nowNum = Integer.parseInt(br.readLine());
            sum += nowNum;
            numList.add(nowNum+4000);
            sortedNum.add(nowNum+4000);
            cntFrequent[nowNum+4000]++;
        }
        System.out.println((int)Math.round((double) sum / N));
        Collections.sort(sortedNum);
        int mid = numList.size() / 2;
        System.out.println(sortedNum.get(mid)-4000);

        int max = 0;
        boolean check = false;
        for(int i=0; i<8001; i++) {
            max = Math.max(max, cntFrequent[i]);
        }
        int mode = 0;
        for(int i=0; i<8001; i++) {
            if(cntFrequent[i] == max && !check) {
                mode = i - 4000;
                check = true;
            } else if(cntFrequent[i] == max && check) {
                mode = i - 4000;
                break;
            }
        }
        System.out.println(mode);
        System.out.println(sortedNum.get(sortedNum.size()-1) - sortedNum.get(0));
    }
}

 

 

728x90
반응형

'개발자 세릴리 > 코딩테스트' 카테고리의 다른 글

[BOJ] Java - 2231번 문제풀이(분해합)  (0) 2023.03.05
[BOJ] Java - 2164번 문제풀이(카드 2)  (0) 2023.03.04
[BOJ] Java - 1978번 문제풀이(소수찾기)  (0) 2023.03.02
[BOJ] Java - 1966번 문제풀이(프린터 큐)  (0) 2023.02.27
[Softeer] Java - level3 문제풀이(성적평가)  (0) 2023.02.17
'개발자 세릴리/코딩테스트' 카테고리의 다른 글
  • [BOJ] Java - 2231번 문제풀이(분해합)
  • [BOJ] Java - 2164번 문제풀이(카드 2)
  • [BOJ] Java - 1978번 문제풀이(소수찾기)
  • [BOJ] Java - 1966번 문제풀이(프린터 큐)
세릴리
세릴리
  • 세릴리
    세리의 데이터베이스 세상
    세릴리
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • 개발자 세릴리 (65)
        • 비전공자 한 입 지식 (12)
        • 코딩테스트 (24)
        • 스펙업 (15)
        • JAVA (5)
        • 일상 (9)
      • 파이어족 세릴리 (21)
        • 블로그 운영 (3)
        • 각종 양식 공유 (1)
        • 돈되는 정보 공유 (17)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발자 공부
    현대 코테
    adsp 독학
    JAVA 개발공부
    현대오토에버 코테
    비전공자 개발
    명품자바프로그래밍
    adsp 벼락치기
    비전공 개발자
    현대자동차 코딩테스트
    명품자바프로그래밍 정답
    오늘 이슈
    adsp 공부법
    현대모비스 코딩테스트
    adsp 수험표
    softeer java 풀이
    adsp 자료
    개발자되는법
    이슈
    Java 문제
    현대 코딩테스트
    JAVA 책 추천
    명품자바프로그래밍 해설
    현대오토에버 코딩테스트
    백준
    java 공부
    개발자 이직
    프로그래밍 공부
    비전공자 개발자
    Softeer 문제 풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
세릴리
[BOJ] Java - 2108번 문제풀이(통계학)
상단으로

티스토리툴바