(구) solved ac class 문제들/class 1

[class 1]백준 윤년(2753번) 풀이 (C++/Python)

isekaipudding 2026. 2. 7. 12:00

문제 : 윤년(2753번)(Bronze V)

문제 링크 : https://www.acmicpc.net/problem/2753
출처 : Baekjoon Online Judge

 

이 문제는 조건문의 응용 버전입니다.

전공자라면 불 대수를 활용하여 풀 수 있으나 여기서는 비전공자 기준으로 설명하겠습니다.

 

우선 문제 내용에 다음과 같은 내용이 있어요.

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

여기서 조건을 2개로 쪼갤 수 있습니다.

1번째 조건 : 4의 배수이면서, 100의 배수가 아닐 때

2번째 조건 : 400의 배수

여기서 "~ 또는"이므로 1번째 조건과 2번째 조건 중 하나라도 만족하면 참으로 판정합니다.

그러므로 C++에서는 (1번째 조건) || (2번째 조건)으로 볼 수 있습니다.

 

그 다음으로 4의 배수이면서, 100의 배수가 아닐 때라는 것에서 또 다시 조건 2개로 쪼개집니다.

1-1번째 조건 : 4의 배수

1-2번째 조건 : 100의 배수가 아닐 때

"~이면서"이므로 1-1번째 조건과 1-2번째 조건 모두 만족해야 1번째 조건이 참이 됩니다.

 

정수 n이 주어질 때 a의 배수인 것을 확인할려면 어떻게 해야 할까요?

n을 a로 나눌 때 나머지가 0이면 "n은 a의 배수"라는 것을 알 수 있습니다.

즉, n % a == 0으로 표현할 수 있습니다.

 

이것으로 전체 조건식을 작성하면 다음과 같습니다.

1번째 조건식 : n % 4 == 0 && n % 100 != 0

2번째 조건식 : n % 400 == 0

전체 조건식 : n % 4 == 0 && n % 100 != 0 || n % 400 == 0

not, and, or 순서로 우선순위가 존재하므로 전체 조건식에서 굳이 괄호 ()는 추가할 필요가 없습니다.

 

이제 이 과정을 C++로 표현합니다.

[C++]

#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int year;
    cin >> year;

    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
        cout << 1;
    } else {
        cout << 0;
    }
 
    return 0;
}

그 다음으로 Python으로 표현해 봅니다.

&& -> and, || -> or로 변환해주세요.

import sys

input = sys.stdin.readline

year:int = int(input().rstrip())

if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 :
    print(1)
else :
    print(0)