CodeWars 열 다섯 번째 문제

Updated:

Find The Parity Outlier

int findNum = 0;

for(int i = 2; i < integers.length; i++) {

    int first = (integers[i-2] > 0 ? integers[i-2]%2 : (integers[i-2]*-1)%2);
    int second = (integers[i-1] > 0 ? integers[i-1]%2 : (integers[i-1]*-1)%2);
    int third = (integers[i] > 0 ? integers[i]%2 : (integers[i]*-1)%2);

    if((first == second) && (first!=third)) {
        findNum = third;
        break;
    } 

    if((first!=second) && (first==third)) {
        findNum = second;
        break;
    }

    if((first!=second) && (first!=third)) {
        findNum = first;
        break;
    }
}

*위에는 내가 짠 코드 아래는 베스트 코드이다. 내가 생각한 알고리즘은 처음부터 숫자 3개를 비교하여 그 중 혼자 나머지가 0이거나 1인걸 찾으면 걸러 내는 것을 생각했다.

*그러나 아래는 처음부터 끝까지 탐색하면서 홀수의 갯수를 합하여 홀수의 갯수가 1초과이면 저장해놓은 짝수를 아니면 홀수를 리턴한다.

*문제는 맞으나… 가독성이나 알고리즘 측면에서는 아래가 더 좋은 것 같다. 조금 더 생각해보는 공부를 해야겠다.

int odd = 0;
int even = 0;
int oddCount = 0;

for(int num : integers) {

    int rest = num % 2;

    if(rest == 0) {
        even = num;
    } else {
        oddCount++;
        odd = num;
    }
}

return oddCount > 1 ? even : odd;