알고리즘 문제를 풀던 중
if문에서 생긴 의문을 해결하기 위해 글을 써본다.(if 문의 조건식의 순서를 바꾸게 되면 왜 다른 결과가 나올까?)
아래는 0일 때 "Zero" 짝수일 때 "Even" 홀수일 때 "Odd"가 나오게 하는 함수이다.
function EvenOdd(num) {
if(num == 0){
return "Zero"
} else if(num % 2 == 0){
return "Even"
} else if(num % 2 == 1){
return "Odd"
}
}
EvenOdd(0) 는 'Zero'
EvenOdd(4) 는 'Even'
EvenOdd(5) 는 'Odd' 가 나오는데
function EvenOdd2(num) {
if(num % 2 == 0){
return "Even"
} else if(num % 2 == 1){
return "Odd"
} else if(num == 0){
return "Zero"
}
}
if(num % 2 == 0)을 먼저 했더니
EvenOdd2(0) 는 'Even'
EvenOdd2(4) 는 'Even'
EvenOdd2(5) 는 'Odd' 가 나왔다.
이유를 생각해보니 if문은 조건식이 참일 때 실행되고
거짓이면 else if문을 실행한다
EvenOdd2 함수에서 이미 0을 포함한 짝수들을 "Even"으로 return 받았기 때문에 (num % 2 ==0 에서)
이후에 else if문에서 (num == 0) 조건을 설정해도 바뀌지 않는다고 생각한다.
function EvenOdd3(num) {
if(num % 2 == 0 && num != 0){
return "Even"
} else if(num % 2 == 1){
return "Odd"
} else if(num == 0){
return "Zero"
}
}
그래서 초기 조건에서 0이 되지 않도록 설정했다.(num % 2 == 0 && num != 0)
EvenOdd3(0) 는 'Zero'
EvenOdd3(4) 는 'Even'
EvenOdd3(5) 는 'Odd' 가 나오고 문제를 해결했다.
이렇게 풀이를 했는데
이후 수업에서 엣지 케이스에 대해 배웠다.
조건문처럼 범위가 있을 때 예외인 부분을 미리 설정한다면 불필요한 반복을 하지 않고
효율적으로 코드를 작성할 수 있다.
앞으로 코드를 작성할 때 위의 문제 상황처럼 예외를 미리 제외하고 풀도록 하자.