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문으로 조건 체크를 한다는 점이다.
'이론 > Data Structure , Algorithm' 카테고리의 다른 글
[210915] 백준 2920번 문제 풀이 / 음계 (0) | 2021.09.15 |
---|---|
[210614] 자바 문제 리딩, static (0) | 2021.06.14 |
[210614] 자바 문제 리딩, 객체와 은닉화 (0) | 2021.06.14 |
[210601] 자바 문제 리딩, 전치 행렬 (0) | 2021.06.01 |
[210529] 자바 문제 리딩 Compare() (0) | 2021.05.29 |