43일차

Suhyeon Lee·2024년 11월 29일

CodeKata

SQL

128. Revising the Select Query II

  • 작성한 쿼리
SELECT
  name
FROM
  city
WHERE
  countrycode = 'USA'
  AND population > 120000
;

129. Select All

  • 작성한 쿼리
SELECT
  *
FROM
  city
;

130. Select By ID

  • 작성한 쿼리
SELECT
  *
FROM
  city
WHERE
  id = 1661
;

131. Japanese Cities' Attributes

  • 작성한 쿼리
SELECT
  *
FROM
  city
WHERE
  countrycode = 'JPN'
;

132. Japanese Cities' Names

  • 작성한 쿼리
SELECT
  name
FROM
  city
WHERE
  countrycode = 'JPN'
;

133. Weather Observation Station 1

  • 작성한 쿼리
SELECT
  city
  , state
FROM
  station
;

134. Weather Observation Station 2

  • 작성한 쿼리
SELECT
  ROUND(SUM(lat_n), 2) lat
  , ROUND(SUM(long_w), 2) lon
FROM
  station
;

Python

54. 2016년

  • 작성한 코드
def solution(a, b):
    answer = ''
    ya = 20 # 2016년의 20
    yb = 16 # 2016년의 16
    days = {1:'SUN' , 2:'MON', 3:'TUE', 4:'WED', 5:'THU', 6:'FRI', 0:'SAT'}
    if (a == 1) | (a == 2) : # 1, 2월인 경우 
        a += 12
        yb -= 1
    # 첼러의 합동식
    h = (b +  int(((a+1)*13)/5) + yb + int(yb/4) + int(ya/4) - 2*ya ) % 7
    answer = days[h]
    return answer

요일을 구하는 첼러의 합동식

더 알아보기

참고할 만한 다른 풀이

  • datetime 패키지
import datetime
def solution(a, b):
    return datetime.date(2016,a,b).strftime('%a').upper()
  • list 활용
# 1
def solution(a,b):
    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    day = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
    m = a-1
    d = sum(month[:m])+(b-1)
    return day[d%7]
    
# 2
def solution(a,b):
    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    day = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
    return day[(sum(month[:a-1])+b-1)%7]
  • dictionary 활용
def solution(a,b):
    day_name = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']
    month_dict = {
        "1":31, 
        "2":29, 
        "3":31, 
        "4":30, 
        "5":31, 
        "6":30, 
        "7":31, 
        "8":31, 
        "9":30, 
        "10":31, 
        "11":30, 
        "12":31
    }
    days = 0
    for i in range(1, a):
        days += month_dict[str(i)]
    days += b
    index = days % 7

    return day_name[index]
  • doomsday algorithm
# 인자로 받은 연도의 doomsday를 반환하는 함수
def get_doomsday(year):
    # 기준일 계산을 위해 연도를 앞 2자리, 뒷 2자리로 나눔
    century, year_end = divmod(year, 100)

    # century를 4로 나눈 나머지가 ...
    # 0이면 화요일 (2), 1이면 일요일 (0) ...
    base_dates = [2, 0, 5, 3]
    base_date = base_dates[century % 4]

    # 방법2로 doomsday 구하기
    a, b = divmod(year_end, 12)
    c = b // 4
    doomsday = (base_date + a + b + c) % 7

    return doomsday


# 인자로 받은 연도가 윤년인지 확인하는 함수
def is_leap_year(year):
    if year % 400 == 0:
        return True

    if year % 100 == 0:
        return False

    if year % 4 == 0:
        return True

    return False


# 더해줘야 할 날짜가 며칠인지 구하는 함수
def get_plus_day(year, month, day):
    # 0월은 없으므로 -1
    # 이후 차례대로 1월 3일, 2월 28일, 3월 0일, 4월 4일 ...
    same_days = [-1, 3, 28, 0, 4, 9, 6, 11, 8, 5, 10, 7, 12]

    # 윤년일 경우 1월 4일, 2월 29일로 만들어줌
    if is_leap_year(year):
        same_days[1] += 1
        same_days[2] += 1

    plus_day = (day - same_days[month]) % 7

    return plus_day


def doomsday():
    year, month, day = map(
        int, input("yyyy mm dd의 형태로 날짜를 입력해주세요. (띄어쓰기로 구분)\n").split()
    )

    doomsday = get_doomsday(year)
    plus_day = get_plus_day(year, month, day)

    dow_index = (doomsday + plus_day) % 7
    day_of_the_week = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]

    return f"{year}{month}{day}일은 {day_of_the_week[dow_index]} 입니다."


print(doomsday())

심화 프로젝트

주제 탐방
기획서 작성

회고

  • 심화 프로젝트 시작!
    • 계획에 맞춰서 결과물 잘 내자~
    • 제출 기한을 꼭 맞추자!
profile
2 B R 0 2 B

0개의 댓글