
조건문에 단계의 문제이기때문에 당연히 조건만 잘 봐주면 쉽게 구분할 수 있다.
중요한 조건은 윤년은 연도가 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);

일단 풀이에 통과했으니 다른사람의 같은 언어에 대한 풀이를 찾아보자.
가장 최상단에 있던 숏코드는 다음과 같다.
Console.Write(DateTime.IsLeapYear(int.Parse(Console.ReadLine()))?1:0);

DateTime에 이미 윤년을 구하는 내장 메소드가 존재하며, 이를 조건부로 삼아서 삼항연산자를 이용해서 작성되었다.
단순한 코드이기 때문에 삼항연산자를 사용해도 크게 무리없이 코드를 분석하고 이해하기 쉬워서 위와같은 방법도 괜찮았으며, 무엇보다 나와 다르게 C#에 이미 존재하는 DateTime을 사용함으로써 뭐랄까 효율적이게 C#을 잘 사용한 것 같았다.
물론 메모리 용량이나, 시간은 같았기 때문에 가독성 측면 부분에서는 조금 아쉬웠다랄까? DateTime.IsLeapYear()메소드가 반환하는 값이 아마 boolean타입 이기 때문에 조건에 저렇게 넣었겠지만, 저 결과를 한번 담아서 썼다면 좋지 않았을까?
int a=int.Parse(Console.ReadLine());Console.Write(a%4==0&&a%100!=0||a%400==0?1:0);
위와같은 풀이를 보면서 사람들이 코드의 전체길이를 줄이기 위해 개행을 하지 않고 최대한 ;를 이용해 붙여쓰는 것을 보았다.
이러면 당연하게 가독성을 해치게 될텐데 굳이 왜 이렇게 쓰는걸까? 의문이 들기도 한다.