본문 바로가기
python

2022.05.11 python 윤년 계산기

by 해맑은 코린이 2022. 5. 11.

2022.05.11 python 윤년 계산기_정리노트

 

암만 생각해도 개뜬금 없지만... 질타해도 어쩔 수 없어! 다시 파이썬으로 돌아왔다!

ㅋㅋㅋ 유데미에서 이벤트가 당첨되어서 유우명한 안젤라 유님의 파이썬 강의를 얻어따!

홀홀홀 최고 최고

바로 들었는데.. 웬걸 생각보다 나는 정말 근본이 없다고는 느꼈지만 파이썬에서도 문법으로 들어가니까 정말 뜬금 없는 곳에서 모르는게 많았다.. 기초부터 다시 듣는 느낌으로 듣다가 요 강의는 프로젝트도 워낙 많이 한다고 하고 계속 끊임 없이 수강생들에게 코드 연습을 시키는데 결국 나의 밑바닥이 이렇게 드러났다. 아무리 프로젝트 하면 뭐하나.. 파이썬 if 도 헷갈리는데.. 아마 for 문 들어가면 재작년처럼 또 혼돈의 4시간을 보낼지도

 


쨋든 하면서 여러 코드 연습 중에 if 부분에서 윤년 계산기가 있었는데, 이게 생각보다 너ㅓㅓ무 헷갈려서 적는 정리 노트.

 

총 3가지로 작성함.

 

윤년

지구가 태양을 한 번 공전하면 1년으로 치는데, 365일 5시간 49분으로 돌기 때문에 4년이 지나면 이 시간은 약 하루가 더 생기게 됨. 이를 맞추기 위해 4년마다 2월을 하루 더 늘리는 해를 윤년이라 한다.

다만 이렇게 계산하면 다시 매년 11분 가량이 초과 되어 계산 된다. 이는 131년이 지나면 또다시 하루가 되기 때문에 대부분의 국가에서는 400년에 총 3일을 어림 잡아 계산하여 100년마다 한 번 윤년을 없애고 400년 마다 다시 하루를 추가해 윤년을 계산한다.

 

 

헷갈리지 ? 그럼 그냥 원리만 보자.. 

 

 

윤년 계산기 원리

 

4년으로 나누어 떨어지는 (% 연산자를 써서 나머지가 0인 경우) 경우는 윤년이다.

(ex) 400, 800, 1600, 2022, 2024, 2028 ... )

 

그 중, 100년으로 나누어 떨어지면 윤년이 아니다.

(ex) 100, 200, 2100, 2200, 2300 ... )

 

400년으로 나누어 떨어지면 윤년이다.

(ex) 400, 800, 2400, 2800, 3200 ... )

 

 

강의에서 풀이는 삼중 if문이지만, 나는 거기에 더해 이중 if문, 논리연산자 사용해서 총 3가지로 풀었다. (여러저러 참고해서..ㅎㅎ)

 

먼저 강의에서 설명해주신 대로, 알고리즘이 처음이라면 또, 나같이 바보 멍청이라면...... 논리를 도식화 하여 그리는 것이 큰 도움이 된다고 가르쳐주셨다. 실제로 첨부해주셨던 draw.io 그림! 여기다가 그려도 좋고 혼자 노트에 끄적여도 좋다.

 

출처 짱길어서 표기할까 하다가... 문제 생기면 바로 지워야게따 

 

쨋든 이게 많은 도움이 되었다. 4로 나누어지는가 ? 그 다음 타고타고.. 간단한 영어이니 다들 이해할 거라 믿어~!

 

# input 이 뱉어내는 값은 항상 string. 그래서 int 로 변환
year = int(input("Which year do you want to check? "))

#삼중 if 문
if year % 4 == 0 :                                 # 4로 나누고 그 중에서
	if year % 100 == 0:                            # 100으로 나누어 떨어 지는 것을 다시 구분.
		if year % 400 == 0:                        # 또, 그 중에서 400으로 나눠 떨어지는 것은 윤년이기 때문에 윤년이라고 출력 
			print("Leap year")                   
		else:
			print("Not leap year")                 # 100으로 나누어 떨어지는 경우, 400으로 나누어 떨어지지 않는 경우는 윤년이 아니다.
	else :
		print("Leap year.")                        # 위의 if 문들을 통과하지 않는 것들은 그냥 4로 나누어 떨어지는 경우기 때문에 윤년이다.
	
else:
	print("Not leap year.")                        # 애초에 4로 나눠 떨어지지 않는 경우는 윤년이 아니다.
    
  
#이중 if문
if year % 4 == 0:                                  # 마찬가지로 4년으로 나누어 떨어지는 경우는 윤년이다.
	if year % 400 == 0:                            # 4년으로 나누어 떨어지는 것 중에서도 400을 먼저 검사해서 얘는 확실히 윤년이다.
		print("Leap year")
	elif year % 100 == 0:                          # 만약 4년으로 나누어 떨어지는 것 중에 100으로 나누어 떨어지는 경우는 윤년이 아니다.
		print("Not leap year")
	else:
		print("Leap year")                         # 얘도 마찬가지로 4년으로 나누어 떨어지고 위의 if의 경우가 아니면 윤년이다.
else:
	print("Not leap year")                         # 4년으로 나누어 떨어지지 않는 경우 윤년이 아니다.
    

#논리 연산자
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:   # (4년으로 나누어 떨어지고, 100으로 나누어 떨어지지 않는 경우) 또는 400으로 나누어 떨어지는 경우는 윤년이다.
	print("Leap year")
else:
	print("Not leap year")                                   # 위의 경우가 아니라면 아무 조건도 충족하지 않으므로, 윤년이 아니다.

 

으으.. 주석 이상하네.. 쨋든 총 3가지인데, 조금만 더 생각하면 3번 논리 연산자가 제일 간결하고, 직관적인 건 이중 if 문인 것 같다! 강의에서는 논리 연산자가 다음 섹션이여서 이리 저리 풀어보다가 살짝 다른 3개가 탄생해버렸다..

 

논리 연산자는 괄호 중요... 혼자 이해하고 생각하려면 괄호 쓰는 것만큼 편하고 잘 보이는 방법이 없다..!

조금만 더 읽어보면서 생각해봅시다... 나도 이리저리 참고한거라서 쵸큼의 힌트를 준 여러분들께 모두 감사의 인사를 전합니다 ( ◜𖥦◝ )

 


오랜만에 알고리즘인듯 아닌듯 맞는듯..? 한 블로그로 포스팅 2개 채웠넹 ㅎㅁㅎ 아이 깁뻐..! 앞으로 이렇게 간단한 것도 올릴거야..! 홀홀 js, python 으로 다져지고 있는... 혼종 코린이가 간돠

 

그럼 모두 빠잉!

 

 

댓글