알고리즘 연습문제 풀기!
참고서적은 Do it! 자료구조와 함께 배우는 알고리즘 입문 : 자바 편


알고리즘이란?

  • 연습문제 1 Q. 네 값의 최댓값을 구하는 메서드를 작성하세요.
      static int exercise1(int a, int b, int c, int d) {
          int max = a;
          if(b > max){
              max = b;
          }
          if(c > max){
              max = c;
          }
          if(d > max) {
              max = d;
          }
          return max;
      }
    

  • 연습문제 2
    Q. 세 값의 최솟값을 구하는 메서드를 작성하세요.
      static int exercise2(int a, int b, int c) {
          int min = a;
          if(b < min) {
              min = b;
          }
          if(c < min) {
              min = c;
          }
          return min;
      }
    

  • 연습문제 3
    Q. 네 값의 최솟값을 구하는 메서드를 작성하세요.
      static int exercise3(int a, int b, int c, int d) {
          int min = a;
          if(b < min) {
              min = b;
          }
          if(c < min) {
              min = c;
          }
          if(d < min) {
              min = d;
          }
          return min;
      }
    

  • 연습문제 4
    Q. 세 값의 대소 관계 13종류의 모든 조합에 대해 중앙값을 구하여 출력하는 프로그램을 작성하세요.
      static int exercise4(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;
      }
    

    메소드 호출할 때 exercise(2,4,5) 이런식으로 ()안의 숫자만 바꿔주면 됨.
    13종류 조합은 이전 포스팅의 ‘여러값에 대한 최댓값’ 참고


  • 연습문제 5
    Q. 중앙값을 구하는 메서드는 다음과 같이 작성할 수도 있습니다.
    그러나 효울이 떨어지는데, 그 이유를 설명하시오.
      static int 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;
          }else{
              return c;
          }
      }
    

    앞에서 한 if문 판단을 뒤에서도 동일하게 수행하므로 불필요한 판단이 되기 때문.
    해답을 참고하면 더 이해가 쉽다..ㅎㅎ

    가장 처음의 if문의 판단if ((b >= a && c<= a) || (b <= a && c >= a))에 주목합니다.
    여기서 b >= a 및 b <= a의 판단을 뒤집은 판단(실질적으로 같은 판단)을 이어지는 else 이후의 else if ((a > b && c < b) || (b <= a && c > b))으로 수행합니다.
    결국 가장 처음의 if가 성립한 경우 2 번째의 if에서도 (실질적으로)같은 판단을 수행하므로 효율이 나빠집니다.