[자바스크립트 연습문제] 9 풀이

이번 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.






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;
}

댓글

J
Jihong Kim 2019.01.12
  var confirmYear = function(year){       if(year % 4 == 0 && year % 100 !== 0){         return true       } else if(year % 400 == 0){         return true       } else {         return false       }     }
이렇게 풀어도 되는 것 같습니다
I
Ian H 2019.01.12
@Jihong Kim,
오 그러네요.  코딩문제는 정답이 여러가지로 나올 수 있죠.
위 코드를 한줄로 요약할 수도 있습니다.
function checkLeapYear(year){    return year%4 == 0 && year%100 != 0 || year%400 == 0;  }
댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP