Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 특정 기간 동안 요일별 발생 횟수 구하기

특정 기간(한 달 또는 한 해) 동안 각 요일이 몇 번씩 등장하는지 확인해야 하는 경우가 있습니다. 파이썬(Python)에서는 요일 목록을 정의하고, 시작 요일을 기준으로 남은 일수만큼 카운트를 증가시키는 방식으로 이를 간단히 계산할 수 있습니다.

핵심 원리는 다음과 같습니다. 어떤 달이든 처음 28일 동안에는 모든 요일이 정확히 4번씩 나타납니다. 따라서 모든 카운트를 4로 초기화한 뒤, 28일을 초과하는 일수만큼 시작 요일부터 순서대로 카운트를 하나씩 늘려주면 됩니다.

예제 코드

def num_of_occurrence(n, first_day):
    my_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    my_count = [4 for i in range(0, 7)]

    my_position = -1
    for i in range(0, 7):
        if (first_day == my_days[i]):
            my_position = i
            break

    inc = n - 28

    for i in range(my_position, my_position + inc):
        if (i > 6):
            my_count[i % 7] = 5
        else:
            my_count[i] = 5

    for i in range(0, 7):
        print(my_days[i], " ", my_count[i])

num = 31
first_day = "Thursday"
num_of_occurrence(num, first_day)

실행 결과

Monday 4
Tuesday 4
Wednesday 4
Thursday 5
Friday 5
Saturday 5
Sunday 4

코드 설명

  • 요일 이름이 담긴 리스트 my_days를 정의합니다.

  • 발생 횟수를 저장할 리스트를 생성하고, 모든 값을 기본값인 4로 초기화합니다.

  • 매개변수로 전달된 시작 요일과 일치하는 인덱스를 찾아 그 위치를 저장합니다.

  • 전체 일수에서 28을 뺀 값(inc)만큼 시작 요일부터 순서대로 해당 요일의 카운트를 5로 올립니다. 인덱스가 6을 초과하면 나머지 연산(% 7)을 사용해 리스트의 처음으로 되돌아갑니다.

  • 마지막으로 각 요일과 그 횟수를 콘솔에 출력합니다.

동작 원리

위 예제는 총 일수가 31일이고 시작 요일이 목요일(Thursday)입니다. 28일을 제외하면 3일이 남으므로, 목요일·금요일·토요일의 카운트가 각각 5로 증가하고 나머지 요일은 4로 유지됩니다.

응용: 임의의 기간에 적용하기

위 코드는 최대 35일까지의 기간에 적합합니다. 한 해(365일 또는 366일)처럼 더 긴 기간에 적용하려면 몫과 나머지를 활용하면 됩니다. 총 일수를 7로 나눈 몫을 기본 횟수로 삼고, 나머지만큼 시작 요일부터 하루씩 추가하면 정확한 결과를 얻을 수 있습니다.

def count_weekdays(n, first_day):
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    base, extra = divmod(n, 7)
    start = days.index(first_day)
    counts = [base] * 7
    for i in range(start, start + extra):
        counts[i % 7] += 1
    return dict(zip(days, counts))

print(count_weekdays(365, "Wednesday"))