mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Tuesday, October 10, 2006

자바/Java] 숫자 배열(Array): 최소값/최대값 구하기: Min Max


for문을 돌려서, 숫자 배열의 최대값 최소값을 찾는 방법이 있긴 한데 너무 번거로워서, 다음과 같은 간단한 코드를 만들어 보았습니다.

우선 숫자가 든 배열을 소팅(정렬)합니다. 그러면 첫번째 요소인 0번 요소에 최소값이, 마지막 요소에는 최대값이 들어가겠지요.


배열(Array)의 최소값(Min) 최대값(Max) 구하기 예제


정수(int)와 실수(double) 2종류를 예로 들었습니다.
파일명: Foo.java
import java.util.Arrays; // Arrays.sort() 에 필요

public class Foo {
  public static void main(String[] args) {

    int i[] = { 124, 634, 7, 5021525, 77, 8765, -356, 0 };
    Arrays.sort(i); // 배열 자체를 정렬된 순서로 변경

    // 최소값(Min) 출력
    System.out.println(i[0]); // 결과: -356

    // 최대값(Max) 출력
    System.out.println(i[i.length - 1]); // 결과: 5021525




    double d[] = { 626.64, 737, 0.0, 66.71647, 2096.829, 336, 0, 0.454 };

    Arrays.sort(d); // 배열 자체를 정렬된 순서로 변경

    // 최소값(Min) 출력
    System.out.println(d[0]); // 결과: 0.0

    // 최대값(Max) 출력
    System.out.println(d[d.length - 1]); // 결과: 2096.829

  }
}





업데이트:

위의 소스는 coalash님께서 지적하신 대로, 소팅하는 데 시간이 걸려서 문제가 있습니다 ^^; 이것은 for문으로 값을 찾는 코드이기에 속도 문제가 없을 것입니다. 버그가 없는지 완벽하게 테스트해 보지는 못했습니다.

public class Foo {
  public static void main(String[] args) {

    int i[] = { 124, 634, 7, 5021525, 77, 8765, -356, 0 };

    // 최소값(Min) 출력
    System.out.println(min(i)); // -356

    // 최대값(Max) 출력
    System.out.println(max(i)); // 5021525

  }

  public static int max(int n[]) {
    int max = n[0];

    for (int i = 1; i < n.length; i++)
      if (n[i] > max) max = n[i];

    return max;
  }


  public static int min(int n[]) {
    int min = n[0];

    for (int i = 1; i < n.length; i++)
      if (n[i] < min) min = n[i];

    return min;
  }

}





Collections.min() 으로도 구해보았습니다.
import java.util.*;

public class Foo {
  public static void main(String[] args) {

    // 정수
    List<Integer> i = Arrays.asList(111, -513, 0, 42424, 222, 333);

    System.out.println(Collections.min(i)); // -513
    System.out.println(Collections.max(i)); // 42424



    // 실수
    List<Double> d = Arrays.asList(111.0, -513.0, 0.0, 42424.0, 222.0, 333.0);

    System.out.println(Collections.min(d)); // -513.0
    System.out.println(Collections.max(d)); // 42424.0




    // 문자 코드 순서를 비교
    String[] s = { "222", "BBB", "333", "111", "AAA" };

    System.out.println(Collections.min(Arrays.asList(s))); // 111
    System.out.println(Collections.max(Arrays.asList(s))); // BBB

  }
}



최소값 최대값 찾기 계산기: ▶▶ 평균 계산기, 합계 구하기, 표준편차 계산기, 중앙값; Sum Average Stdev Median Calc




tag: java
자바 | Java 프로그래밍

2 Comments:
At October 11, 2006 at 8:56 PM, Blogger coalash said...

제안하신 정렬후 맨앞/뒤 값을 사용하는 방식은 메모리 면에서나 속도 면에서 모두 비효율적이라 생각합니다. 가장 효율적이라는 퀵소트만 해도 O(n log n) 이니까요. for 문 한번이라면 O(n)
으로 끝날 것을...

코드의 단순함을 추구하신다면 Collection 으로 변환후 min, max로 바꾸는 방식을 써보심이 어떨까요?

Arrays.sort(i);
System.out.println(i[0]);
대신
System.out.println(Collections.min(Collections.asList(i)));

가 되겠네요.

 
At October 11, 2006 at 9:21 PM, Blogger mwultong said...

좋은 조언 감사 드립니다.

속도 문제에 대해서 신경을 쓰지 못했습니다...

(∩_∩)

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top