[TIL] java 최대값,최소값 알고리즘

빼곰·2022년 12월 23일
0

문제

  • 정수로 일어진 배열에서 가장 큰 값을 구하는 최대값 알고리즘을 구현해보시오.
  • 배열내 정수 값들에서 최대값을 구하는 알로리즘에 대해서 아는지 묻는 문제이다.

1. 배열선언 및 초기화

int[] ar = {1,13,15,17,-2};

2. 정수 비교에 사용되는 함수들

  • Math.max ,Math.min : 두 값을 비교하여 더 큰값 또는 더 작은 값을 반환한다.
    정수,실수 모두 비교 가능
System.out.println(Math.max(10, 4)); // 10
System.out.println(Math.min(10, 4)); // 4
  • Integer.MIN_VALUE : int형으로 표현가능한 가장 작은 값을 반환한다.
    값들을 비교할 때 비교할 변수의 초기값으로 많이 설정한다.
max = Integer.MIN_VALUE; //-2147483648
  • Math.randeom() : 0.0 ~1.0 사이의 난수를 반환한다.

    Returns a double value with a positive sign, greaterthan or equal to 0.0 and less than 1.0.Returned values are chosen pseudorandomly with (approximately)uniform distribution from that range.

10의 배수를 곱하고 정수형으로 형변환하여 정수난수를 만들 수 있다.

int randomNum = (int)(Math.random()*100); 십의 자리수 정수 난수값

3 최소값 알고리즘 구현

3-1. 혼자서 풀어보기

//[1] : 배열 선언
int[] ar = {1,13,15,17,-2};
		
// 혼자서 풀어보기
int max = 0; // max변수 만들고
for(int i=0;i<ar.length;i++) { // for문 안에서 max값을 찾기
	if(ar[i]>max) max=ar[i];
}
System.out.println(max); //max값 출력

3-2. 선생님 풀이 : 배열내 첫번쨰 원소의 값이 제일 크다고 가정하고 초기화

int[] ar = {4,13,15,17,-2};
int max = ar[0];
System.out.println("현재 배열내 가장 큰 값은 : "+max); //4
// 2번째 부터 비교하면 되니깐 int i=1로 시작.
for(int i=1;i<ar.length;i++) {
// 계속 더 큰 값(최대값)을 max에 넣어줘야 하니까
	if(max<ar[i]) // 비교해준다. 
		max = ar[i]; // 더 큰 값을 max에 넣는다.
	}
System.out.println("현재 배열내 가장 큰 값은 : "+max); //17

4. 최소값 알고리즘 구현

4-1. 혼자서 풀어보기

int[] ar = {1,13,15,17,-2};
int min = Integer.MAX_VALUE;
for(int i=0;i<ar.length;i++) {
	if(min>ar[i]) min = ar[i];
}
System.out.println(min); //-2

4-1. 선생님 : 일단 배열내 첫번쨰 원소의 값이 가장 작다고 가정하고 초기화

int min = ar[0];
System.out.println("현재 배열내 가장 작은 값은 : "+min); //4
for(int i=0;i<ar.length;i++) {
	if(min>ar[i]) min = ar[i];
}
System.out.println(min);
System.out.println("현재 배열내 가장 작은 값은 : "+min); //-2

5. 최대값,최소값 한번에 구현

  • 랜덤으로 정수 10개의 값을갖는 배열을 만들어 최대값과 최소값을 출력
  1. 크기 10의 정수 배열 선언
int[] ar = new int[10];
  1. 반복문을 돌면서 랜덤으로 10개의 정수 값을 셋팅--> Math.randeom()
for(int i=0;i<ar.length;i++) {
	ar[i] =  (int)(Math.random()*10);
	System.out.print(ar[i] + " "); //6 5 3 0 9 6 1 3 5 1
}
  1. 최대값,최소값 변수 초기화
int max = ar[0];int min = ar[0];
  1. 반복문을 돌면서 최대값,최소값 비교
for(int i=1;i<ar.length;i++) {
	//최대값 비교
	if(max<ar[i]) max = ar[i];
	//최소값 비교
	if(min>ar[i]) min = ar[i];
}
  1. 출력
System.out.println("ar 배열내 최대값: " + max);
System.out.println("ar 배열내 최소값: " + min);

ar 배열내 최대값: 9
ar 배열내 최소값: 0

실행 할때마다 랜덤 값이 바뀌기 때문에 최대값,최소값도 바뀐다.

반복문 사용하지 않고 구하기 --> 정렬함수

  • Arrays.sort() : 오름차순으로 배열을 정렬해준다.
for(int i=0;i<ar.length;i++) {
	ar[i] =  (int)(Math.random()*100);
	System.out.print(ar[i] + " "); // 67 64 20 50 19 70 42 49 77 34 
}
Arrays.sort(ar); // 정렬하기
for(int n :ar) {
	System.out.print(n + " "); //19 20 34 42 49 50 64 67 70 77
}
System.out.println();
System.out.println(ar[0]); //최소: 19
System.out.println(ar[ar.length-1]); //최대 : 77

회고

이미 알고 있는 내용이지만 다시 한번 풀이강의를 들으면서 풀어보니 문제를 풀때 먼저 어떤 방식으로 풀지 정리하는 법과 알기 쉽게 설명하는 방법을 익힌것 같다.

profile
개발 블로그

0개의 댓글