[프로그래머스]2016년, 나누어 떨어지는 숫자 배열

Minyoung Lee·2022년 12월 29일

Programmers

목록 보기
2/15
post-thumbnail

1. 2016년

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12901

개념 & 문법

- 개념

1. 윤년

  • 윤년: 유일하게 2월에 2/29이 추가되어 1년이 366일이 되는 것을 의미한다.

  • 윤년의 조건

    • 4로 나누어 떨어지면 -> 윤년
    • 4로 나누어 떨어져도 100으로 나누어 떨어지면 -> 평년
    • 100으로 나누어 떨어져도 400으로 나누어 떨어지면 -> 윤년

    => year % 4 == 0 and year % 100 != 0 or year % 400 == 0

  • [날수를 이용하여 요일 구하기]
    https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=itinstructor&logNo=100201553237
    - 1월 1일의 요일을 기준으로 원하는 월, 요일의 날 수를 계산하여
    7로 나누어 나머지가 1인 경우 1월 1일 요일과 같다는 개념으로 한다.
    Ex.
    1/1 금요일 -> (날 수 % 7 == 1) 나머지가 1인 경우 금요일
    1/2 토요일 -> 나머지가 2인 경우 토요일
    1/3 일요일 -> 나머지가 3인 경우 일요일
    1/4 월요일 -> 나머지가 4인 경우 월요일
    1/5 화요일 -> 나머지가 5인 경우 화요일
    1/6 수요일 -> 나머지가 6인 경우 수요일
    1/7 목요일 -> 나머지가 0인 경우 목요일
    1/8 금요일 -> (8 % 7 = 1) 나머지가 1이므로 금요일
    . . .
    2/1 -> 날 수 : 31일 + 1일 -> (32 % 7 = 4) -> 월요일

- 문법

  • list의 range를 설정하여 sum 함수 적용 가능

    	sum(list[0:3])
  • [another solution]

    • datetime 클래스의 weekday 함수 사용
#[출처]https://docs.python.org/ko/3/library/datetime.html?highlight=weekday]
#date.weekday() : 정수로 요일을 반환. 월요일은 0, 일요일은 6
#date.isoweekday() : 월요일이 1, 일요일이 7

from datetime import date

date(2002, 12, 4).weekday() == 2 #수요일
date(2002, 12, 4).isoweekday() == 3 #수요일

코드

def solution(a, b):
    answer = ''
    
    months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #윤년 - 달의 일 수
    days = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"] 
    #7로 나누어 나머지가 1이면 1/1에 해당하는 요일
    
    date = sum(months[0:a-1]) + b
    
    answer = days[(date % 7)]
    
    return answer

후기

윤년 문제는 입문자에게 항상 나오는 문제 같다.
특히, 여기선 언급이 없었지만 4, 100, 400의 문제 설명을 통해 조건문을 작성할 수 있느냐 등이 예시이다.

2. 나누어 떨어지는 숫자 배열

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12910

개념 & 문법

- 문법

[출처] https://wikidocs.net/22803

  • filter(): 특정 조건으로 걸러, 걸러진 요소들로 iterator객체를 만들어서 리턴해주는 함수.

    • filter를 사용할 땐, list로 다시 감싸줘야 편하다.
    answer = list(filter(lambda x : x < 5, arr))

코드

def solution(arr, divisor):
    answer = []
    
    answer = list(filter(lambda x: x % divisor == 0, arr))
    
    if not answer:
        answer.append(-1)
    else:
        answer.sort()
    
    return answer
    
 ##참고 코드
 # return ( sorted([filter(lambda x: x % divisor == 0, arr)] or [-1]) )
 # return 에서 empty list는 어차피 False로 인식하기 때문에, or 을 이용하여 [-1] 로 대입하게 한다. 
 
profile
웩알고👩‍💻

0개의 댓글