[Level 1] 프로그래머스 2016년 Kotlin 풀이

[Level 1] 프로그래머스 2016년 Kotlin 풀이

프로그래머스 “2016년” Kotlin 풀이


문제 소개

이번 문제는 병신년(丙申年) 문제입니다!

problem

, 을 입력받아서 2016년의 무슨 요일인지를 출력하는 문제군요!


문제풀이

풀이도 매우 간단합니다.

우선 2016년의 총 날짜들을 배열로 담아줍니다.
이때 윤년이기 때문에 2월은 29일로 칩니다!

1
val year2016 = listOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

그 다음은 월화수목금토일을 문제에서 요구하는 형태로 배열에 담아줍니다.

2016년 1월 1일은 금요일이어서 0번째에 FRI를 넣을 것 같지만
이때 zero-based-indexing을 고려해서 저희는 배열의 1번째에 FRI를 담아줍니다!

1
val dayOfWeek = listOf("THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED")

이제 할 일은 간단합니다.

524일이라면 1월 + 2월 + 3월 + 4월 + 24일이므로

1월 부터 4월까지의 총 날짜들을 모두 더한 후 24를 더해주면 지금까지가 2016/01/01로 부터 몇일인가를 알 수 있겠죠!

저는 range.map을 이용하여 구현해봤습니다.

1
val totalDay = (0 until a - 1).map { year2016[it] }.sum() + b

이제 totalDay7로 나눈 나머지로 datOfWeek에서 꺼내오면 끝!

1
dayOfWeek[totalDay % 7]

정답 코드

1
2
3
4
5
6
7
8
9
class Solution {
fun solution(a: Int, b: Int): String {
val dayOfWeek = listOf("THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED")
val year2016 = listOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
val totalDay = (0 until a - 1).map { year2016[it] }.sum() + b

return dayOfWeek[totalDay % 7]
}
}

요일 계산을 직접 구현해본건 처음이라 재밌었습니다!

import java.util.Calendar 필요

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

댓글