[실타래(프로그래밍 편)] 2-2. 조건과 분기
분류 실타래(프로그래밍 편)
chevron_right 목차
조건
우주와 인간의 약속, 윤년
김민재
(…)
먼저 윤년은 양력에서 2월이 29일까지 있는 해를 말한다. 즉 1년이 366일인 해를 일컫는 단어이다. 이 때문에 달력은 매년 같지 않으며 가끔은 복잡하게 변하곤 한다. 즉, 가끔씩 조정되는 달력의 중심에는 윤년이라는 흥미로운 요소가 포함되어 있는 셈이다.
(…)
윤년을 이해하려면 태양 주위를 도는 지구의 궤도를 추적할 수 있어야 한다. 우리는 흔히 지구는 365일 만에 태양을 돈다고 알고 있지만, 사실 이는 오차가 있는 설명으로 엄밀히 말하자면 틀린 말이다. 1년의 길이는 태양과 춘분점을 기준으로 계산하는데 이는 태양년(365.2422일)을 말한다. 사실, 이는 지구가 한 바퀴 도는 공전주기인 항성년(365.2563일)과도 약간 다르고 대략 20분 정도 짧은 시간이다. 즉, 태양의 1년은 대략 365일일뿐 정확히 365일이 아니다. 우리는 단순히 달력을 단순하게 유지하기 위해서 여분의 시간을 무시하고 그냥 365일이라고 부를 뿐이다. 하지만 시간이 지남에 따라 그 작은 차이가 누적된다면 이는 반드시 해결이 필요할 법, 이때 편리함과 실제 물리학과의 균형, 혹은 우리의 시계와 우주의 실제 시계와의 균형을 맞추는 트릭과도 같은 윤년이 등장하게 된다.
(…)
율리우스력에서는 325년의 춘분인 3월 21일을 기준으로 했던 율리우스력은 1년을 365.25일로 계산하였고 4로 나누어떨어지는 해를 윤년으로 지정했으며, 그 밖의 해는 모두 평년으로 지정했다.
(…)
그레고리력은 1년의 길이를 365.2425일로 정하는 역법 체계로서 윤년을 포함하는 양력을 뜻한다. 그레고리력에서는 100으로 나누어떨어지지만 400으로 나누어서는 떨어지지 않는 해를 평년으로 지정하였다.
(…)
출처: 사이언스타임즈 (https://www.sciencetimes.co.kr/nscvrg/view/menu/248?searchCategory=220&nscvrgSn=255586)
그레고리력에서는 율리우스력에서의 윤년이었던 “4로 나누어지는 해” 중 “100으로 나누어떨어지지만 400으로 나누어떨어지지 않는 해”를 제외한 해들을 윤년으로 삼았습니다. 따라서 정리하면, “4로 나누어떨어지는 해 중, 100으로 나누어떨어지지 않거나 400으로 나누어떨어지지 않는 해”라고 할 수 있겠네요.
2조건을 정확하게 표현해 봅시다.우리는 여기서 조건을 두 가지 표현으로 나타낼 겁니다. 그 중, 먼저 순서도와 비슷하게 분기를 활용해 나타내 봅시다. 분기는 잠시 후 자세히 알아볼 것이므로, 지금은 조건에 따라 나뉘어지는 것 정도로 생각합시다.
2-1분기를 활용해 조건을 표현해 봅시다.차례대로 생각해 봅시다. 4로 나누어떨어지는가? 와 100으로 나누어떨어지는가? , 400으로 나누어떨어지는가? 중 가장 먼저 무엇을 판단해야 할까요? 먼저 큰 범위부터 생각해 보는 것이 좋아요. 100과 400은 모두 400으로 나누어떨어지기 때문에 4로 나누어떨어지는 것이 가장 큰 조건이라고 할 수 있어요. 그 다음으로 400은 100으로 나누어떨어지죠? 따라서 4 → 100 → 400 순서로 판단하면 올바르게 판단할 수 있어요.
Loading diagram...
4로 나누어떨어지는가? 와 100으로 나누어떨어지는가? , 400으로 나누어떨어지는가? 세 가지의 논리값이 주어졌을 때, 어떻게 평년과 윤년을 판단할 수 있을까요? 윤년을 판단하는 연산을 만들어 봅시다.
위의 순서도를 참고해 볼까요? 4 → 100 → 400 순으로 판단하고 있으니, 저걸 참고하면 좋겠죠. 4로 나누어떨어지는지 먼저 고려하고, 그 다음에 100으로 나누어떨어지지 않거나, 100으로 나누어떨어지면서 400으로도 나누어떨어지는지 고려하면 되겠네요. 그것을 고려해서 조건식을 써 봅시다.
(4의 배수인가?) and (not (100의 배수인가?) or ((100의 배수인가?)) and (400의 배수인가?)))
그런데 여기서 굳이 100으로 나누어떨어지는지 확인할 필요는 없죠. 400으로 나누어떨어진다면 100으로도 나누어떨어질테니까요. 따라서 더 간단하게 쓴다면:
(4의 배수인가?) and (not (100의 배수인가?) or (400의 배수인가?))
# 4의 배수이면서, 100의 배수가 아니거나 400의 배수인가?다른 방법도 있어요. 400의 배수는 어차피 4의 배수이기도 하니까,
(4의 배수인가?) and (not (100의 배수인가?)) or (400의 배수인가?)
# 4의 배수이면서 100의 배수가 아니거나, 400의 배수인가?
이렇게 작성해도 같은 의미죠. 이렇게 같은 조건을 나타내더라도 여러 방법이 있을 수 있어요. 주어진 논리값을 잘 활용해서 정확한 결과를 연산할 수 있는 식을 쓰는 것이 중요해요.
분기
분기는 나뉘어서 갈라짐. 또는 나누어진 그 갈래. / (전산) 컴퓨터 내의 명령어 실행 순서를 변경하여 다른 명령을 실행할 수 있게 하는 일을 뜻해요. 어떤 조건에 따라서 다른 코드를 실행하도록 갈라지는 거예요. 분기에 대해서는 앞에서 충분히 다뤘어요. 여기서는 코드에서 분기가 어떻게 쓰이는지를 다룰 거예요.
인용하기
@misc{devngho202522,
author = {Yu, Dongho},
title = {2-2. 조건과 분기},
howpublished = {\url{https://ngho.dev/posts/2-2._조건과_분기}},
year = {2025},
month = {jul},
note = {Accessed: 2025-08-01}
}APA 유동호. (2025년 7월 30일). 2-2. 조건과 분기. devngho 블로그. https://ngho.dev/posts/2-2._조건과_분기
Chicago 유동호. “2-2. 조건과 분기.” devngho 블로그, 2025년 7월 30일, https://ngho.dev/posts/2-2._조건과_분기.
MLA 유동호. “2-2. 조건과 분기.” devngho 블로그, 2025년 7월 30일, https://ngho.dev/posts/2-2._조건과_분기.