Pages

2014년 12월 1일 월요일

[PUZZLE] 1. Oddity

문제 : Odd Number 여부를 리턴하는 함수가 있다. 
          입력한 parameter가 Odd Number 이면 true 그렇지 않으면 false

        1
2
3
public static boolean isOdd(int i) {
    return i % 2 == 1;
}

        - 위 isOdd 함수는 음수가 입력 될 경우 false를 리턴 하는 오류가 있다.        
        - 오직 양의 정수에서만 정상동작 한다.



해결 1     ////////////////////////////////////
     // Java Puzzler Solution
     // DESC: Use Integer Only
     public static boolean isOdd_Sol_1(int i) {
          return i % 2 != 0;
     }
    - Integer 입력만 동작한다. float이 입력될 경우 정상 동작하지 않는다.
    - 속도가 느리다.

해결 2
     ////////////////////////////////////
     // Java Puzzler Solution
     // DESC: Use Performance Critical Setting
     public static boolean isOdd_Sol_2(int i) {
          return (i & 1) != 0;
     }
    - 속도가 original operator 처럼 빠르다.
    - float 입력의 경우에도 정상 동작이 가능하다.

테스트 소스코드
    package chapter1.puzzle;
    public class Puzzle1 {
     public static boolean isOdd(int i) {
         return i % 2 == 1;
     }
     public static boolean isOdd_Try(int i) {
          return Math.abs(i) % 2 == 1;
     }
     ////////////////////////////////////
     // Java Puzzler Solution
     // DESC: Use Integer Only
     public static boolean isOdd_Sol_1(int i) {
          return i % 2 != 0;
     }
     ////////////////////////////////////
     // Java Puzzler Solution
     // DESC: Use Performance Critical Setting
     public static boolean isOdd_Sol_2(int i) {
          return (i & 1) != 0;
     }
     public static void main( String args[] )
     {
          int input = 1;
          boolean bRes = Puzzle1.isOdd( input );
          System.out.println( bRes );
          bRes = Puzzle1.isOdd_Try( input );
          System.out.println( bRes );
          bRes = Puzzle1.isOdd_Sol_1( input );
          System.out.println( bRes );
          bRes = Puzzle1.isOdd_Sol_2( input );
          System.out.println( bRes );
     }
}

[ 출처 : http://gggura.egloos.com/3453162 ]

댓글 없음:

댓글 쓰기