[백준] 2753번 윤년

권태형·2023년 11월 28일

알고리즘

목록 보기
11/33

나의 풀이

조건문에 단계의 문제이기때문에 당연히 조건만 잘 봐주면 쉽게 구분할 수 있다.

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

이 문장에서 가장 중요한 키워드는 ~이면서(and)또는(or)이다. 이 부분만 잘 캐치하면 쉽게 구할 수 있다.

int y = int.Parse(Console.ReadLine());
    
if((y%4 == 0 && y%100 != 0) || y%400 == 0) Console.WriteLine(1);
    
else Console.WriteLine(0);


다른사람 풀이

일단 풀이에 통과했으니 다른사람의 같은 언어에 대한 풀이를 찾아보자.
가장 최상단에 있던 숏코드는 다음과 같다.

  • 1
Console.Write(DateTime.IsLeapYear(int.Parse(Console.ReadLine()))?1:0);


DateTime에 이미 윤년을 구하는 내장 메소드가 존재하며, 이를 조건부로 삼아서 삼항연산자를 이용해서 작성되었다.

단순한 코드이기 때문에 삼항연산자를 사용해도 크게 무리없이 코드를 분석하고 이해하기 쉬워서 위와같은 방법도 괜찮았으며, 무엇보다 나와 다르게 C#에 이미 존재하는 DateTime을 사용함으로써 뭐랄까 효율적이게 C#을 잘 사용한 것 같았다.
물론 메모리 용량이나, 시간은 같았기 때문에 가독성 측면 부분에서는 조금 아쉬웠다랄까? DateTime.IsLeapYear()메소드가 반환하는 값이 아마 boolean타입 이기 때문에 조건에 저렇게 넣었겠지만, 저 결과를 한번 담아서 썼다면 좋지 않았을까?

  • 2
int a=int.Parse(Console.ReadLine());Console.Write(a%4==0&&a%100!=0||a%400==0?1:0);

위와같은 풀이를 보면서 사람들이 코드의 전체길이를 줄이기 위해 개행을 하지 않고 최대한 ;를 이용해 붙여쓰는 것을 보았다.

이러면 당연하게 가독성을 해치게 될텐데 굳이 왜 이렇게 쓰는걸까? 의문이 들기도 한다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글