Language/JAVA

[JAVA 기초 이론] 최대값, 최소값 찾기 알고리즘

오류나면꽥꽥 2023. 5. 10. 12:50

: 값이 정렬되어있을 때 > 배열에서 사용

 

 

✅ 최대값 찾기 알고리즘

배열의 첫번째 값을 이미로 최대값으로 설정

최대값 위치도 0으로 초기화

int max=data[0];

int maxIndex=0;

for(data의 길이){

          if(max<data[i]){

          max보다 큰값을 발견하면 변화발생

          max=data[i];

          maxIndex=i;

           }

}

 

 

 

ex)

public static void main(String[] args) {

    // 상황) 학생 N명
    // 총점수합
    // 평균점수
    // 1등이 몇번인지?

    int[] stu=new int[5];
    stu[0]=20;
    stu[1]=12;
    stu[2]=63;
    stu[3]=87;
    stu[4]=54;

    // 출력
    System.out.println("=== 학생 명단 ===");
    for(int i=0;i<stu.length;i++) {
        System.out.println("학생 "+(i+1)+"번은 "+stu[i]+"점입니다.");
    }
    System.out.println("====================");

    // 총점수합
    int sum=0;
    for(int i=0;i<stu.length;i++) {
        sum+=stu[i];
    }
    System.out.println("총점은 "+sum+"점입니다.");

    double avg=sum*1.0/stu.length; // 형변환(casting)
    System.out.println("평균은 "+avg+"점입니다.");

    // [최대값 찾기 알고리즘]	
    int max=stu[0]; // 현재 최대값이 [0]에 존재하는 값이다!
    int maxIndex=0; // 최대값이 저장된 index를 기억할 변수

    // [1]부터 차례대로 '현재 최대값'과 비교
    for(int i=1;i<stu.length;i++) {
        if(max<stu[i]) { // 최대값이 현재비교값보다 작다면,
            // 변화발생!
            max=stu[i];
            maxIndex=i;
        }
    }
    System.out.println("1등은 "+(maxIndex+1)+"번학생이고, 점수는 "+max+"점입니다.");
}

 

최대값 디버깅표

i           max<stu[i]

-----------------------------------------

1            stu[0]<stu[1]        F

2            20<63                  T  ->  max=stu[i];                             

                                                    maxIndex=i; i의 값 0 -> 2로 바뀜

3             63<87                T   -> i의 값 2 -> 3으로 바뀜

4             87<57                F

= 3에서 마지막 T가 나왔기 때문에 최대값은 i가 3 해당

 

출력)

1등은 4번학생이고, 점수는 87점입니다.

 

 

 

최소값은 반대로 생각

for(data의 길이){

          if(min>data[i]){

          min보다 큰값을 발견하면 변화발생

          min=data[i];

          minIndex=i;

           }

}