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

 
Previous Post 엑셀] 숫자를 한글로 읽기, 금액을 한자로 변환/문자로 변경 함수 NUMBERSTRINGC언어] 하드 디스크 남은 용량, 사용한 용량, 전체 용량 얻기 읽기: Get Disk F...C언어] 64비트 정수 __int64 사용법: 변수 선언, printf()로 출력C언어 팁] cl.exe: C소스 컴파일 + 컴파일된 프로그램 실행을 동시에 하는 법: H...C언어] cl.exe: 소스 파일 여러개 한꺼번에 컴파일하는 배치파일: Multiple S...엑셀VBA매크로.예제: 셀 테두리에 색상 지정, 행운의 시트 만들기, Excel Sheet...자바/Java] 부동소수점 연산 오차 수정 출력하기 - Floating-Point: 9.7...한글을 한자로 변환 입력하기: 포토샵/울트라에디트, Chine Character Input...한자] 초서, 전서, 예서, 행서, 해서 검색 사이트: Chinese Seal Charac...윈도우] 리눅스 히든파일명으로 리네임, 파일명 앞에 마침표(.)넣기: Rename Linu...

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

Tuesday, October 10, 2006

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

2 Comments:
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 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 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top