2022.07.06 - [공부기록/자바스크립트 코딩테스트] - [백준/JS] 2753 윤년
윤년 문제를 풀다가 if 문이 중첩되는 형태에 대해 고민해봤다.
if 문이 중첩이 되는 저러한 형태가 보기 좋지않다고 생각이 되었기 때문이다.
if (input % 4 === 0) {
if (input % 100 === 0) {
if (input % 400 === 0) {
console.log(1);
} else {
console.log(0);
}
} else {
console.log(1);
}
} else {
console.log(0);
}
IF 문 중첩 줄이기
그래서 해당 유튜브 영상을 보고 if 문의 중첩을 줄여보기로 했다.
- if 문 다음에 나오는 공통된 절차를 각 분기점 내부에 넣는다.
- 분기점에서 짧은 절차부터 실행하게 if 문을 작성한다.
- 짧은 절차가 끝나면 return(함수 내부의 경우)이나 break(for문 내부의 경우)로 중단한다.
- else를 제거한다(이때 중첩하나가 제거된다.)
- 위 절차를 반복한다.
줄인 코드는 다음과 같다.
const check = (input) => {
if (input % 4 !== 0) {
return 0;
}
if (input % 100 !== 0) {
return 1;
}
if (input % 400 !== 0) {
return 0;
}
return 1;
};
console.log(check(input));
위 처럼 줄일 수 있으나 뭔가 부족해보인다.
short-circuit evaluation
A || B에서 A가 참이면 B를 실행하지 않고 곧바로 참이 되고, A && B에서 A가 거짓이면 B를 실행하지 않고 곧바로 거짓이 되는 로직이다.
다음처럼 로직을 짤 수 있지만, 나는 이런코드 너무 길어서 읽기가 힘들다.
if (input % 4 === 0 && (input % 100 !== 0 || input % 400 === 0)) console.log(1);
else console.log(0);
이런 고민을 통해서 short-curcuit evaluation이라는 용어에 대해 한번더 정리하게 되었고, 어떤게 더 좋은 코드일까에 대한 고민은 앞으로도 계속해봐야겠다. 나는 개인적으로는 1번 방식이 내가 읽기에는 더 쉬우나 협업을 할때 short-curcuit evaluation 으로 짜야한다면 그렇게 로직을 짜도록 연습을 해야할 것이다.
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[백준/JS] 20436 ZOAC 3 (0) | 2022.07.06 |
---|---|
자바스크립트 여러개의 값 반환하기 (0) | 2022.07.06 |
[백준/JS] 2753 윤년 (0) | 2022.07.06 |
[백준/Python] 1655 가운데를 말해요 (0) | 2022.07.05 |
[백준/Python] 2075번 N번째 큰수 (0) | 2022.07.05 |