엣지 케이스를 우연히 발견하다

김영후·2022년 7월 7일
0

알고리즘 문제를 풀던 중

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' 가 나오고 문제를 해결했다.

이렇게 풀이를 했는데

이후 수업에서 엣지 케이스에 대해 배웠다.

엣지 케이스란 알고리즘이 처리하는 데이터의 값이 알고리즘의 특성에 따른 일정한 범위를 넘을 경우에 발생하는 문제를 가리킨다.

조건문처럼 범위가 있을 때 예외인 부분을 미리 설정한다면 불필요한 반복을 하지 않고

효율적으로 코드를 작성할 수 있다.

앞으로 코드를 작성할 때 위의 문제 상황처럼 예외를 미리 제외하고 풀도록 하자.

profile
https://poagg.tistory.com/ 로 이전합니다.

0개의 댓글