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;