울음참고 개발공부
article thumbnail
728x90

 

윤년이란 ?

윤달이나 윤일이 드는 해로서, 
풀어 설명하면 '역법을 실제 태양년에 맞추기 위해 하루 또는 월을 끼우는 해' 이다.

지구가 태양을 도는 데에는 약 365일 4시간 정도가 걸리므로
365일을 제외한 시간들을 모야 태양력에서는 4년 마다 한 번 2월 29일을 두어 하루를 늘린다.

 

 

그렇다면 윤년을 구해보자 ! 

 

윤년이 아닌 년을 '평년' 이라고하는데 , 조건은 이렇다

 

 

윤년 : 4년마다 한번. 400년이 되는 주기는 윤년이다.
평년 : 100년이 되는 주기는 평년이다.

year, month, day 를 입력받아 윤년여부와 입력받은 날의 요일을 구하는 함수를 만들어보자

 

윤년은 4년마다 한번이므로 100년도 나눠떨어져서 윤년! 이아니라 평년으로 친다.

근데 또 400년주기는 윤년이다.

 

 

function isLeapYear(year) {
  if ((year % 4 == 0 && year % 100 !== 0) || year % 400 == 0) {
    return true; // 윤년인 경우
  } else {
    return false; // 윤년이 아닌 경우
  }
}

function getDayOfWeek(year, month, day) {
  const daysOfWeek = ['일', '월', '화', '수', '목', '금', '토'];
  const date = new Date(`${year}-${month}-${day}`);
  const dayOfWeek = date.getDay(); // 0 (일요일)부터 6 (토요일)까지의 값을 반환

  return daysOfWeek[dayOfWeek];
}

// 사용 예시
const year = 2023;
const month = 5;
const day = 22;

const isLeap = isLeapYear(year);
const dayOfWeek = getDayOfWeek(year, month, day);

console.log(`윤년 여부: ${isLeap}`);
console.log(`입력받은 날짜의 요일: ${dayOfWeek}`);

 

 

결과

 

 

 

 

 


 

 

여기서 간단하게 짚고 넘어갈 부분이 있다.

 

바로 논리 연산자의 이해! 

 

처음에 '( year % 4 == 0 && year % 100 !== 0) && year % 400 == 0 ' 이 조건이 되어야하지않나? 라고 생각했다.

 

하지만 예를 들어 year 이 2000 이라 할때, 해당 식으로 계산해보면

 

year % 4 == 0 -> true

year % 100 !== 0 -> false

 

(year % 4 == 0 && year % 100 !== 0 ) -> true && false -> false

 

year % 400 -> true ==> 결론적으로 ( T && F ) && T 가 되어 F 를 반환하여 윤년이 아니라고 된다.

 

 

그래서 '( year % 4 == 0 && year % 100 !== 0) || year % 400 == 0 ' 이 되어야지

 

( T && F ) || T 가 되어 T 를 반환할 수 있게 된다. 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!