Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 금융문자분석경진대회
- 우분투
- ChatGPT
- Baekjoon
- 편스토랑 우승상품
- 맥북
- 더현대서울 맛집
- programmers
- gs25
- 백준
- Docker
- 코로나19
- 캐치카페
- 자연어처리
- Kaggle
- SW Expert Academy
- AI 경진대회
- dacon
- hackerrank
- 파이썬
- Real or Not? NLP with Disaster Tweets
- ubuntu
- 프로그래머스 파이썬
- 프로그래머스
- PYTHON
- 편스토랑
- Git
- github
- leetcode
- 데이콘
Archives
- Today
- Total
솜씨좋은장씨
[BaekJoon] 2730번 : 오늘은 OS 숙제 제출일 (Python) 본문
728x90
반응형
코딩 1일 1문제! 오늘의 문제는 백준의 오늘은 OS 숙제 제출일 입니다.
👨🏻💻 문제 풀이
와~! 쉬운문제다~! 하고 풀기 시작했다가 몇가지 디테일들을 놓쳐 계속 틀렸던 문제였습니다.
💡 놓쳤던 디테일 들
- 1월과 12월
- 윤년 고려
- 정답 속 DAY 의 복수형 - 차이나는 날짜가 1일 이면 DAY / 2일 이상이면 DAYS
💡 1월과 12월 반영
def is_need_check_next_year(submission_month, deadline_month, submission_year):
is_need_check = False
deadline_year = submission_year
if submission_month == 12 and deadline_month == 1:
is_need_check = True
deadline_year += 1
elif submission_month == 1 and deadline_month == 12:
is_need_check = True
deadline_year -= 1
return is_need_check, deadline_year
💡 윤년 고려
def is_leap_year(year):
is_leap = False
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
is_leap = True
return is_leap
def calculate_date_term(submission_month, submission_day, submission_year,
deadline_month, deadline_day):
is_submission_year_leap = is_leap_year(submission_year)
is_need_check, deadline_year = is_need_check_next_year(submission_month, deadline_month, submission_year)
if not is_submission_year_leap: |
if deadline_month == 2 and deadline_day == 29: | - 이 부분
deadline_year = 2004 |
submission_day = datetime(year=submission_year, month=submission_month, day=submission_day)
deadline_day = datetime(year=deadline_year, month=deadline_month, day=deadline_day)
term = (deadline_day - submission_day).days
return term, submission_day, deadline_day
💡 정답 속 DAY 의 복수형 - 차이나는 날짜가 1일 이면 DAY / 2일 이상이면 DAYS
day_status = f"{datetime_to_string(deadline_day)} IS {term} {'DAYS' if term > 1 else 'DAY'} AFTER"
day_status = f"{datetime_to_string(deadline_day)} IS {abs(term)} {'DAYS' if abs(term) > 1 else 'DAY'} PRIOR"
🤩 datetime -> 문자열 날짜에서 0제거
def datetime_to_string(date):
return '{dt.month}/{dt.day}/{dt.year}'.format(dt=date)
👨🏻💻 코드 ( Solution )
from datetime import datetime
def is_need_check_next_year(submission_month, deadline_month, submission_year):
is_need_check = False
deadline_year = submission_year
if submission_month == 12 and deadline_month == 1:
is_need_check = True
deadline_year += 1
elif submission_month == 1 and deadline_month == 12:
is_need_check = True
deadline_year -= 1
return is_need_check, deadline_year
def is_leap_year(year):
is_leap = False
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
is_leap = True
return is_leap
def datetime_to_string(date):
return '{dt.month}/{dt.day}/{dt.year}'.format(dt=date)
def is_grade_homework(term, submission_day, deadline_day):
day_status = "SAME DAY"
if term < -7 or term > 7:
day_status = "OUT OF RANGE"
elif 0 < term < 8:
day_status = f"{datetime_to_string(deadline_day)} IS {term} {'DAYS' if term > 1 else 'DAY'} AFTER"
elif -8 < term < 0:
day_status = f"{datetime_to_string(deadline_day)} IS {abs(term)} {'DAYS' if abs(term) > 1 else 'DAY'} PRIOR"
return day_status
def calculate_date_term(submission_month, submission_day, submission_year,
deadline_month, deadline_day):
is_submission_year_leap = is_leap_year(submission_year)
is_need_check, deadline_year = is_need_check_next_year(submission_month, deadline_month, submission_year)
if not is_submission_year_leap:
if deadline_month == 2 and deadline_day == 29:
deadline_year = 2004
submission_day = datetime(year=submission_year, month=submission_month, day=submission_day)
deadline_day = datetime(year=deadline_year, month=deadline_month, day=deadline_day)
term = (deadline_day - submission_day).days
return term, submission_day, deadline_day
def os_homework_submission_date(submission_date, deadline):
submission_month, submission_day, submission_year = map(int, submission_date.split("/"))
deadline_month, deadline_day = map(int, deadline.split("/"))
term, submission_day, deadline_day = calculate_date_term(submission_month, submission_day, submission_year,deadline_month, deadline_day)
return is_grade_homework(term, submission_day, deadline_day)
if __name__ == "__main__":
for _ in range(int(input())):
submission_date, deadline = input().split()
print(os_homework_submission_date(submission_date, deadline))
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 1308번 : D-Day (Python) (0) | 2022.05.04 |
---|---|
[BaekJoon] 2738번 : 행렬 덧셈 (Python) (0) | 2022.05.03 |
[BaekJoon] 25083번 : 새싹 (Python) (0) | 2022.05.01 |
[BaekJoon] 2408번 : 큰 수 계산 (Python) (0) | 2022.04.30 |
[BaekJoon] 2052번 : 지수연산 (Python) (0) | 2022.04.29 |
Comments