관리 메뉴

솜씨좋은장씨

[BaekJoon] 9948번 : Have you had your birthday yet? (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 9948번 : Have you had your birthday yet? (Python)

솜씨좋은장씨 2022. 11. 17. 11:17
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 생일을 맞아 birthday 가 들어간 백준의 Have you had your birthday yet? 입니다.

 

9948번: Have you had your birthday yet?

Today it is 4th August. If you were born before 4th August (in whatever year you were born) then you have already had your 2007 birthday. If you were born after 4th August, you have not yet had your 2007 birthday. If you were born on 4th August, happy birt

www.acmicpc.net

🧑🏻‍💻 문제 풀이

생일을 입력받으면 ( 형식 : 일(숫자) 월(문자) / ex) 17 November ) 

2007년 기준으로

8월 4일 이전인지 이후인지 

8월 4일이어서 생일인지 2월 29일이어서 윤년에만 생일이라 올해는 생일이 없는지 확인하는 문제입니다.

def convert_str_month_to_num(str_month):
    base_dict = {
        "January": 1, "February": 2, "March": 3, "April": 4, 
        "May": 5, "June": 6, "July": 7, "August": 8, 
        "September": 9, "October": 10, "November": 11,"December": 12
    }
    
    return base_dict[str_month]

영어로 되어있는 월 정보를 숫자로 바꾸어주는 함수를 하나 만들어주었습니다. ( November -> 11 )

def get_day_month_from_birthday_string(birthday):
    day, month = birthday.split()
    
    day = int(day)
    
    month = convert_str_month_to_num(
        str_month=month
    )
    
    return day, month

그 함수를 활용하여 입력받은 생일 날짜에서 월과 일을 숫자로 변환하는 함수를 만들어줍니다.

17 November -> 17, 11

def get_day_month_from_birthday_string(birthday):
    day, month = birthday.split()
    
    day = int(day)
    
    month = convert_str_month_to_num(
        str_month=month
    )
    
    return day, month

이제 우리가 목표했던 

2007년 기준으로

8월 4일 이전인지 이후인지 

8월 4일이어서 생일인지 2월 29일이어서 윤년에만 생일이라 올해는 생일이 없는지를 확인하는 함수를 만들고

각 케이스별로 출력해야하는 문자열을 정답으로 return 하도록 하면 끝! 입니다.

def birthday_check_2007(birthday):
    day, month = get_day_month_from_birthday_string(
        birthday=birthday
    )
    
    if day == 29 and month == 2:
        answer = "Unlucky"
    elif day == 4 and month == 8:
        answer = "Happy birthday"
    else:    
        birthday_datetime = datetime(year=2007, month=month, day=day)
        standard_datetime = datetime(year=2007, month=8, day=4)
        
        if birthday_datetime < standard_datetime:
            answer = "Yes"
        else:
            answer = "No"
            
    return answer

입력과 출력이 포함된 전체 코드는 아래를 참고해주세요.

🧑🏻‍💻 코드 ( Solution )

from datetime import datetime

def convert_str_month_to_num(str_month):
    base_dict = {
        "January": 1, "February": 2, "March": 3, "April": 4, 
        "May": 5, "June": 6, "July": 7, "August": 8, 
        "September": 9, "October": 10, "November": 11,"December": 12
    }
    
    return base_dict[str_month]


def get_day_month_from_birthday_string(birthday):
    day, month = birthday.split()
    
    day = int(day)
    
    month = convert_str_month_to_num(
        str_month=month
    )
    
    return day, month


def birthday_check_2007(birthday):
    day, month = get_day_month_from_birthday_string(
        birthday=birthday
    )
    
    if day == 29 and month == 2:
        answer = "Unlucky"
    elif day == 4 and month == 8:
        answer = "Happy birthday"
    else:    
        birthday_datetime = datetime(year=2007, month=month, day=day)
        standard_datetime = datetime(year=2007, month=8, day=4)
        
        if birthday_datetime < standard_datetime:
            answer = "Yes"
        else:
            answer = "No"
            
    return answer


if __name__ == "__main__":
    birthday_list = []
    
    while True:
        birthday = input()
        
        if birthday == "0 #":
            break
            
        birthday_list.append(birthday)
        
        
    for birthday in birthday_list:
        print(birthday_check_2007(birthday=birthday))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments