알고리즘 입문(자바) - 01_1 알고리즘이란? (연습문제)
알고리즘 연습문제 풀기!
참고서적은 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에서도 (실질적으로)같은 판단을 수행하므로 효율이 나빠집니다.