✏️기록하는 즐거움
article thumbnail

Link

 

2753번: 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서

www.acmicpc.net

문제

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

입력 > 첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
출력 > 첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

 

제출

const fs = require("fs");

const input =
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `1999`;

const year = input;

if (year % 4 === 0 && (year % 100 != 0) || (year % 400 === 0)) {
  console.log("1");
} else {
  console.log("0");
}

 

개념

'===' vs '=='

  • '==' : equality operator
    • 값을 비교하기 전에 비교 하는 값을 동일한 데이터 유형으로 변환한다.
  • '===' : strict equality operator
    • 데이터 유형의 변환 없이 바로 값을 비교한다.
console.log(5 == "5") // true
console.log(5 === "5") // false

'&&' vs '&' / '||' vs '|'

  • '&(Bitwise AND)'와 '|(Bitwise OR)'는 비트 연산자
  • '&&(Logical AND)' 와 '||(Logical OR)'는 논리 연산자
  • 비트 연산자와 논리 연산자 둘다 같은 결과를 낸다.
    &와 &&는 모든 조건이 true일 때 true이고, |와 ||는 하나의 조건만 true여도 true이다.

그렇다면 차이점은 무엇일까?

  • 앞의 조건을 검사 한 후, 뒤에 조건을 보지 않아도 이미 결과가 나왔을 때 뒤에 조건을 검사하냐, 건너뛰냐의 차이이다.
let A = 1;
let B = 2;

if (A === 2 && B++ === 1) {
  // 앞의 조건이 false 이므로 결과는 false
}
console.log(`&&일 때 A=${A}, B=${B}`);

if ((A === 2) & (B++ === 1)) {
  // 앞의 조건이 false 이므로 결과는 false
}
console.log(`&일때 A=${A}, B=${B}`);

if (A === 1 || B-- === 1) {
  // 앞의 조건이 true 이므로 결과는 true
}
console.log(`||일때 A=${A}, B=${B}`);

if ((A === 1) | (B-- === 1)) {
  // 앞의 조건이 true 이므로 결과는 true
}
console.log(`||일때 A=${A}, B=${B}`);

 

  • 비트 연산자(&, |)를 사용할 때만 B의 값이 증감되는 것을 확인할 수 있다.
  • 여기서 또 신기한 점은 비트 연산자가 뒤에 조건을 건너뛰지 않아서인지 vscode에서 prettier를 사용 중일 때
    비트 연산자에만 괄호를 해준다는 점이다.

 


Comment

 

profile

✏️기록하는 즐거움

@nor_coding

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