Lv1. 2016년

Hello·2022년 7월 23일
0

코딩테스트 연습 > 2016년

1. 풀이 설명

윤년에 달 별로 갖는 날짜를 months에 정의하고, 2016년 1월 1일 금요일을 기준으로
(a-1월까지의 전체 날짜 + b일) % 7 을 계산하여 2016년 a월 b일의 요일을 반환한다.

2. 나의 풀이

python

def solution(a, b):
    answer = ''
    months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    value = sum(month[:a-1]) + b
    if value % 7 == 0:
        answer = "THU" 
    elif value % 7 == 1:
        answer = "FRI"
    elif value % 7 == 2:
        answer = "SAT"
    elif value % 7 == 3:
        answer = "SUN"
    elif value % 7 == 4:
        answer = "MON"
    elif value % 7 == 5:
        answer =  "TUE"
    elif value % 7 == 6:
        answer = "WED"
    return answer

kotlin

fun solution(a: Int, b: Int): String {
	val month = listOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    val sum = (0 until a-1).map { month[it] }.sum() + b
    return when(sum%7) {
        0 -> "THU"
        1 -> "FRI"
        2 -> "SAT"
        3 -> "SUN"
        4 -> "MON"
        5 -> "TUE"
        6 -> "WED"
        else -> ""
    }
}

3. 나의 풀이 2

  • value를 요일로 변환하는 부분을 개선했다.

python

def solution(a, b):
    months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    days = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']
    return days[(sum(months[:a-1])+b) % 7]

kotlin

fun solution(a: Int, b: Int): String {
	val months = listOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    val days = listOf("THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED")
    val sum = (0 until a - 1).map { idx ->
    	months[idx] 
    }.sum() + b
    return days[sum%7]
}

4. 배운점

  1. 요일을 계산하여 반환하는 부분 같이 분기문이 길어지는 로직은 반환값을 미리 정의하여 (ex. days ) 가독성을 좋게 하자.
profile
안녕하세요 :)

0개의 댓글