본문 바로가기
이론/Data Structure , Algorithm

[210530] 자바 문제 리딩 , 배열에서 가장 큰 값과 작은 값 구하기

by 6161990 2021. 5. 30.

int[] numbers = {10,55,23,2,79,101,16,82,30,45};

 

여기서 가장 큰 값과 작은 값을 구해 출력해보는 문제를 풀어보았다.

알고리즘으로 풀어야해서 약간 헷갈릴 수 있지만 어렵진않았다. 

 

먼저, 배열의 맨 처음 값부터 끝 값까지 

[앞의 인덱스] vs. [뒤의 인덱스]를 비교하며

작으면 min에 넣고 크면 max에 넣는 방식이다. 

 

우선 맨 처음 인덱스 값을 min,과 max값에 넣어준다.

int min = numbers[0];
int max = numbers[0];

 

참고로, 출력시 가장 큰 값과 작은 값의 위치를 알 수 있도록 Position변수도 선언한다.

int minPos = 0;
int maxPos = 0;

 

 

 

본격 알고리즘 식은 이렇다. 

 

최소값부터 리딩해보자면,

이미 0번째의 값은 int min과 int max에 넣어놨으므로, for문에서는 1번 인덱스부터 비교한다.

for(int i = 1; i<numbers.length; i++)

 

15  만약, 최소값(numbers[0])보다 numbers[1]번이 작다면,

if(min > numbers[i])

 

 16  numbers[1]번이 더 작은 값이므로 그 값을 최소값변수에 넣어라. (오른쪽항에서 왼쪽항으로 대입)

min = numbers[i];

 

17  그리고 원래 numbers[1]이있던 인덱스[1]에 1을 더해 0번부터가 아닌 1번부터 위치를 파악하도록 한다.

(출력에서 쓰임)

minPos = i+1;

 

15- 18 1부터 numbers.length까지 반복한다.

 

 

 

최대값은 이 반대로 생각하면된다.

20  만약, 최대값(numbers[0])보다 numbers[1]이 크다면,

if(max < numbers[i])

21  numbers[1]이 더 큰 값이므로 그 값을 최대값 변수에 넣어라. (오른쪽항에서 왼쪽항으로 대입)

max = numbers[i];

22  그리고 원래numbers[1]이 자리해있던 인덱스[1]에 1을 더해 0번부터가 아닌 1번부터 위치를 파악하도록 한다.

(출력에서 쓰임)

maxPos = i+1;

 

20-23  1부터 numbers.length까지 반복한다.

 

주의할 점은 if, else 조건문이 아니라 min과 max 각각의 if문으로 조건 체크를 한다는 점이다.