자바에서 최대값 구하기, 인접한 두 숫자를 비교하여 왼쪽 > 오른쪽 이면 두 숫자를 맞 바꾼다.
1, 3, 5, 4 라는 숫자들이 있다면
먼저 1과3을 비교하여 우측이 크니까 그대로 두고,
다음 3과5을 비교 --> 우측이 크니까 그대로 둔다.
다음 5와4를 비교 --> 우측이 크지 않으므로 4와5가 자리를 바꾼다.
맨우측에 있는것이 최대값이 된다.
숫자가 n개이면 비교는 n-1번 수행한다.
방법1의 결점인 충분히 작은 수를 설정해야 하는 번거러움은 없다.
단점으로는 비교.교환 완료후 숫자의 배열상태가 달라진다.
아래의 예제를 보자....
import
java.io.*;
import java.util.*;
class Max2 {
public static void
main(String[] args) throws IOException {
int[] array = new int[20];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("콤마(,)로 구분하여 숫자들을 입력하세요...");
String digits =
br.readLine();
StringTokenizer st = new StringTokenizer(digits, ",");
for(int i=0; st.hasMoreElements(); i++) {
array[i] =
Integer.parseInt(st.nextToken());
}
int tmp=0;
for(int i=0; i
< array.length-1; i++) {
if (array[i] > array[i+1]) {
tmp =
array[i];
array[i] = array[i+1];
array[i+1] = tmp;
}
}
System.out.println("최대값은 : " + array[array.length-1]);
}
}
아래의 예제는 작업전후 배열이 바뀌므로 이를 arraycopy로 보관해 둔다.
import java.io.*;
import java.util.*;
class Max3 {
public
static void main(String[] args) throws IOException {
int[] array = new
int[20];
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("콤마(,)로 구분하여 숫자들을
입력하세요...");
String digits = br.readLine();
StringTokenizer st = new
StringTokenizer(digits, ",");
for(int i=0; st.hasMoreElements(); i++) {
array[i] = Integer.parseInt(st.nextToken());
}
int [] newArray = new
int[array.length];
System.arraycopy(array, 0, newArray, 0, array.length);
int tmp=0;
for(int i=0; i < newArray.length-1; i++) {
if
(newArray[i] > newArray[i+1]) {
tmp = newArray[i];
newArray[i] =
newArray[i+1];
newArray[i+1] = tmp;
}
}
System.out.println("최대값은
: " + newArray[array.length-1]);
}
}
댓글 없음:
댓글 쓰기