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;

           }

}