2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다.
제한사항
입출력 예
a | b | result |
---|---|---|
5 | 24 | "TUE" |
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
일주일은 7일을 기준으로 반복되므로 7로 나눈 나머지의 값에 따라 해당하는 요일을 구할 수 있다.
제한 사항의 윤년이 있으므로 2월은 29일임을 고려해야한다.
import Foundation
func solution(_ a:Int, _ b:Int) -> String {
var days = 0
for month in 1..<a {
if month == 2 {
days += 29
} else {
//8월 이전 홀수월은 31일, 짝수월은 30일
//8월 이후 홀수월은 30일, 짝수월은 31일
if (month%2 == 0 && month<8) || (month%2 != 0 && month>=8) {
days += 30
} else {
days += 31
}
}
}
days += b-1
switch days%7 {
case 0: return "FRI"
case 1: return "SAT"
case 2: return "SUN"
case 3: return "MON"
case 4: return "TUE"
case 5: return "WED"
case 6: return "THU"
default: return ""
}
}
요일 이름을 담은 배열과 각 달의 날 수를 배열을 새로 정의, a월 이전까지의 날짜 합 및 a월 b일 까지의 b를 더한 뒤, 7로 나눈 나머지로 요일을 구한다.
import Foundation
func solution(_ a:Int, _ b:Int) -> String {
let weekdays = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
let daysInMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
return weekdays[(daysInMonth[0..<a-1].reduce(0, +) + b - 1) % 7]
}
import Foundation
func solution(_ a:Int, _ b:Int) -> String {
let dateToGet = DateFormatter()
dateToGet.dateFormat = "yyyy-MM-dd"
let date = dateToGet.date(from:"2016-\(a)-\(b)")
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EE" //"EE" to get short style
return dateFormatter.string(from:date!).uppercased()
}