pullwall
Well done! 코딩
pullwall
전체 방문자
오늘
어제
  • 분류 전체보기 (151)
    • 개발환경 (2)
    • java study (21)
    • 백준 단계별 (51)
    • 알고리즘 (3)
    • AI (43)
    • 클라우드 (3)
      • Kubernetes in Google (3)
    • 논문 (5)
    • 리눅스 (1)
    • AWS (4)
    • 수학 (15)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 단계별
  • 쿠버네티스
  • 백준
  • 정렬알고리즘
  • Ai
  • 논문리뷰
  • Google
  • 자바독학
  • 선택정렬
  • Kubernetes
  • 정렬
  • 수학
  • dataset
  • 단계별
  • 자바
  • Java
  • pytorch
  • 알고리즘
  • LLM
  • AWS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
pullwall

Well done! 코딩

백준 단계별

[Java] 백준 2108: 통계학

2023. 2. 14. 15:39
728x90
import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();

        int[] arr = new int[8001];

        int sum = 0;
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        int median = 10000;
        int mode = 10000;

        for(int i=0;i<N;i++){
            int value = sc.nextInt();
            sum += value;
            arr[value + 4000]++;

            if(max<value){
                max = value;
            }
            if(min>value){
                min=value;
            }
        }

        int cnt = 0;
        int mode_max=0;

        boolean flag = false;

        for(int i = min+4000; i<=max+4000 ; i++){
            if(arr[i]>0){
                if(cnt<(N+1)/2){
                    cnt += arr[i];
                    median = i-4000;
                }
                if(mode_max<arr[i]){
                    mode_max = arr[i];
                    mode = i-4000;
                    flag=true;
                }
                else if(mode_max == arr[i] && flag == true){
                    mode = i-4000;
                    flag=false;
                }
            }
        }

        System.out.println((int)Math.round((double)sum/N));
        System.out.println(median);
        System.out.println(mode);
        System.out.println(max-min);
    }
}

 

최빈값을 처리하는 방법에 대해 설명하자면..

이전의 최빈값의 최댓값(mode_max) 보다 현재 최빈값(arr[i]) 이 더 클 경우,  index(i)를 최빈값에 초기화 해주며, flag 를 true 로 변경한다.

 

만약, 동일한 최빈값을 갖고있으면, 두 가지의 경우의 수로 나뉜다.

첫 번째는 동일한 최빈값이 이전에 1 번만 나타났을경우 인데, 이 경우에는 flag 가 true 일 테니 두 번째로 작은 값이 현재 i 가 되고 결과적으로 mode(최빈값 변수)를 초기화 해주면 된다. 그리고 반드시 flag를 false 로 바꿔주어야 된다. 이후에 같은 최빈값이 또 나오더라도 이미 두 번째로 작은 값은 변하지 않기 때문에 그래야 else if 문을 실행시키지 않으면서 두 번째로 작은 최빈값이 수정되지 않는다.

728x90

'백준 단계별' 카테고리의 다른 글

[Java] 백준 11650: 좌표 정렬하기  (0) 2023.02.15
[Java] 백준 1427: 소트인사이드  (0) 2023.02.15
[Java] 백준 10989: 수 정렬하기 3  (0) 2023.02.14
[Java] 백준 2751: 수 정렬하기 2  (0) 2023.02.08
[Java] 백준 25305: 커트라인  (0) 2023.02.02
    '백준 단계별' 카테고리의 다른 글
    • [Java] 백준 11650: 좌표 정렬하기
    • [Java] 백준 1427: 소트인사이드
    • [Java] 백준 10989: 수 정렬하기 3
    • [Java] 백준 2751: 수 정렬하기 2
    pullwall
    pullwall

    티스토리툴바