[백준/Node.js] 2753번 (윤년)

DongHee Kim·2021년 7월 15일
1

Algorithm

목록 보기
2/12
post-thumbnail

2753번(윤년)

문제

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다.
1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다.
하지만, 2000년은 400의 배수이기 때문에 윤년이다.

입력

첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.

출력

첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

예제입력1 / 예제출력1

2000 / 1

예제입력2 / 예제출력2

1999 / 0


풀이 코드


첫 번째 코드

//fs모듈로 입력값 받기
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split(' ');

//입력되는 연도를 정수로 변환
let year = parseInt(input);

/*윤년의 조건을 제대로 파악한 뒤, 논리연산자를 활용해 한 번에 조건으로 넣었다.
&&(AND) 연산자와 ||(OR)연산자 사용*/
if ((year%4 ==0 && year%100 !=0) || year%400 ==0){
console.log(1);
} else {
console.log(0);
};

📌 핵심 - 문제(윤년의 조건)를 제대로 파악하는 것
윤년 : 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때
(나는 연도가 4의 배수이면서 100의 배수가 아닐 때 또는 400의 배수일 때로 생각해 자꾸만 오답이 나왔다)


두 번째 코드

//fs모듈로 입력값 받기
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split(' ');

//입력되는 연도를 정수로 변환
let year = parseInt(input);

/* (1) 400의 배수이면 1 출력(윤년), 그렇지 않을 경우 
(2) 4의 배수이면서 100의 배수가 아니면 1 출력(윤년)
(3) 위 두 조건을 모두 충족하지 않으면 0 출력(윤년x) */
if (year%400 ==0) {
console.log(1);
} else if (year%4 ==0 && year%100 !=0 ) {
console.log(1);}
else {
console.log(0);};

📌 핵심

if 조건문에서 else의 범위를 이해하는 것

예를 들어 200은 (if문의 조건) 400의 배수가 아니여서
(else if 조건) 4의 배수이면서 100의 배수가 아닐 때 윤년이 된다.
하지만 200은 4의 배수이면서 100의 배수인 관계로 if문과 else if문의 조건을 모두 충족하지않는다.
따라서 두 조건에 모두 해당하지않는 값을 위해 마지막에 else 문을 따로 두어야한다. 이걸 몰라서 계속 오답이 나왔다.

덧붙이는 이야기

많은 시행착오를 거치고 정답 결과를 받았지만, 이전 오답이 왜 틀린건지 이해되지않아 사전스터디 팀원분들(🤍)과 함께 한참을 고민했다.
5명이 함께 고민한 결과 결국 오답의 이유를 파악해 속 시원하게 해결했다. 결과를 알게된 것 외에도 함께 고민하고 오답의 원인을 찾아내는 그 과정이 새롭고 즐거웠다. 나도 어서 성장해서 더 많은 도움을 줄 수 있는 팀원이 되어야겠다는 결심을 하며 마무리! 😎

profile
일상의 성실이 자존감을 만드는 성취주의자

1개의 댓글

comment-user-thumbnail
2021년 7월 17일

함께 고민하는 과정에서 놓쳤던 부분들도 알게되는 것 같아서 참 좋은것 같아요!!👍

답글 달기