이번 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.
9-1 풀이
function supplementaryClass(koreanScore, englishScore, mathScore){ if(koreanScore <= 50 && englishScore <= 50 && mathScore <= 50){ return "종합반"; } else if(koreanScore <= 50 || englishScore <= 50 || mathScore <= 50){ return "단과반"; } else { return "보충 수업 없음"; } }
if, if else, else와 and 연산자, or 연산자를 사용하여 조건에 맞는 함수를 만들 수 있습니다.
9-2 풀이
주어진 조건을 다시 한번 살펴봅시다.
- 연수가 4로 나누어떨어지는 해는 윤년으로 한다.
- 이 중에서 100으로 나누어떨어지는 해는 평년으로 한다.
- 그중에 400으로 나누어떨어지는 해는 윤년으로 둔다.
이 중 첫번째 조건만 if문으로 나타내면 다음과 같습니다. 윤년은 영어로 leap year이므로 isLeapYear를 윤년인지 아닌지를 담는 변수명으로 하였습니다.
var isLeapYear; if(year%4 == 0){ isLeapYear = true; } else { isLeapYear = false; }
첫번째 조건을 만족하는 년도들은 두번째 조건에 따라 다시 윤년인지 아닌지가 갈립니다. 두번째 조건을 첫번째 if 코드에 다시 적용해 봅시다.
var isLeapYear; if(year%4 == 0){ if(year%100 == 0){ isLeapYear = false; } else { isLeapYear = true; } } else { isLeapYear = false; }
두번째 조건을 만족하는 년도들은 다시 세번째 조건에 따라 윤년인지 아닌지가 갈립니다. 세번째 조건을 다시 두번째 if 코드에 적용해 봅시다.
var isLeapYear; if(year%4 == 0){ if(year%100 == 0){ if(year%400 == 0) { isLeapYear = true; } else { isLeapYear = false; } } else { isLeapYear = true; } } else { isLeapYear = false; }
이 코드를 함수로 감싸면 아래와 같이 함수가 완성됩니다. (정답예제 1)
function checkLeapYear(year){ var isLeapYear; if(year%4 == 0){ if(year%100 == 0){ if(year%400 == 0) { isLeapYear = true; } else { isLeapYear = false; } } else { isLeapYear = true; } } else { isLeapYear = false; } return isLeapYear; }
수학시간에 배운 '명제의 대우은 사실이다'라는 것 생각나시나요? 만약 생각이 나지 않는 다면 인터넷으로 명제의 역, 이 대우를 다시 한번 알아보고 오세요.
주어진 조건에 대우를 구하면 다음과 같이 변경할 수 있습니다.
- 조건1: 연수가 4로 나누어떨어지지 않는 해는 평년이다.
- 조건2: 조건1에 해당하지 않지만 100으로 나누어떨어지지 않는 해는 윤년이다.
- 조건3: 조건 1, 조건 2에 해당하지 않지만 400으로 나누어떨어지는 해는 평년이다.
이 조건으로 함수를 만들면 다음과 같이 좀 더 간단하게 만들 수 있습니다. (정답예제 2)
function checkLeapYear(year){ var isLeapYear; if(year%4 != 0){ isLeapYear = false; } else if(year%100 != 0){ isLeapYear = true; } else if(year%400 != 0) { isLeapYear = false; } else { isLeapYear = true; } return isLeapYear; }