관리 메뉴

bright jazz music

01-2 중앙값(median) 구하기 본문

Algorithm/Java text book

01-2 중앙값(median) 구하기

bright jazz music 2022. 9. 3. 16:43
//내가 짠 코드
class Median {
    int median;

    public int medianTest(int a, int b, int c) {
        median = a;

        if (median >= b) {
            if (b >= c) {
                median = b;
            } else if (median >= c) {
                median = c;
            }
        } else {
            if (c >= b) {
                median = b;
            } else if (c > median) {
                median = c;
            }
        }
        return median;
    }
}

public class TestMain{
    public static void main(String [] args){
        Median median = new Median();
        System.out.println(median.medianTest(12,1445, 112));

    }
}

------------------

//교과서

package org.example;

import java.util.Scanner;

public class Median {
    static int med3(int a, int b, int c){

        if (a >= b)
            if (b >= c)
                return b;
            else if (a <= c)
                return a;
            else
                return c;
        else if (a > c)
            return a;
        else if (b > c)
            return c;
        else
            return b;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("세 수의 중앙값 구하기");

        System.out.println("a의 값");
        int a = sc.nextInt();

        System.out.println("b의 값");
        int b = sc.nextInt();

        System.out.println("c의 값");
        int c = sc.nextInt();


        System.out.println("세 수의 중앙값은 " + med3(a, b, c) + "입니다.");


    }


//    세 수의 중앙값 구하기
//    a의 값
//100
//    b의 값
//200
//    c의 값
//300
//    세 수의 중앙값은 200입니다.



}

 

중앙값 도출 과정은 퀵 정렬(quick sort)에서도 사용한다.

 

 

 

아래와 같이 작성하면 위의 코드에 비해 효율이 떨어진다. 

static med3 (int a, int b, int c) {
    if((b >= a && c <= a) || (b <= a && c >= a) ){
        return a;
    }else if((a > b && c < b) || (a < b && c > b)){
        return b;
    }
    return c;
}

 

그 이유는 더이상 연산이 필요하지 않은 경우에도 추가 연산이 의무화 되기 때문이다.

예를 들어 (a >= c >= b) 인 경우, 처음의 코드에서 중위값을 구하려면 아래와 같이 대략 네 번의 연산이 실행된다.

 

1. if (a >= b)  ==> yes

2. if(b >= c) ==> no

3. else if(a<=c) ==> no

4. return c;

 

두 번째 코드에선 (a >= c >= b) 인 경우, 중위값을 구하려면 아래의 모든 단계를 거쳐야 한다.

 

if

1. (b >= a) ==> no

2. (c <= a) ==> yes

3.  && ==> no

4. (b <= a) ==> yes 

5. (c >= a) ==> no

6. &&



else if

7. (a > b) ==> yes

8. (c  < b ) ==> no

9. && ==> no

10. (a < b) ==> no

11. (c > b) ==> yes

12. && ==> no

13. return c;

'Algorithm > Java text book' 카테고리의 다른 글

01-6 연습문제  (0) 2022.12.02
01-4 반복  (0) 2022.12.01
01-3 순서도( flow chart)  (0) 2022.09.05
01-1 최댓값/최솟값 구하기  (0) 2022.09.02
Comments