Swift 2016 달력 (stride, reduce)

김형준·2023년 6월 12일
0

코딩문제

목록 보기
7/9

문제해결을 위한 공부요소

-stride 함수
-reduce 고차함수
-for 반복문
-날짜계산의 이해

func solution(_ a:Int, _ b:Int) -> String {
  var totalDay = b
  var dayArray: [String] = ["THU","FRI","SAT","SUN","MON","TUE","WED"]
    //2016 1월 1일이 금요일이기 때문에, index 1을 "FRI"에 맞춰준다
    //1월 2일은, index가 2인 "SAT"
    
    var numberOfDays: [Int] = [31,29,31,30,31,30,31,31,30,31,30,31]
    //2016년은 윤년임. 각 월의 마지막날이 언제까지 있는지 확인한다
    //2월이 29일까지 있음을 확인
    
    방법1 - stride 활용하여 더하기
    for i in stride(from: 0, to: a-1, by: 1) {
        totalDay += numbersOfDays[i]
    // 0부터 a-1전까지 numbersOfDays[i]를 다 더함
    // to: a-1 범위는 a-1 (not including)을 의미함.
    //기존 b의 일수까지 더해짐을 잊지말기
    }
    
    방법2 - reduce 고차함수 활용하여 더하기, 인덱스 설정 잘보기
    var kai = numbersOfDays[0..<a-1].reduce(0, +)+b
    
    // 총 일수를 % 7 하면 weekArray[i]를 출력한다
    방법1 결과값- return dayArray[totalDay % 7]
    방법2 결과값- return dayArray[kai % 7]
}

리팩토링 답안

func solution(_ a:Int, _ b:Int) -> String {
    var dayArray: [String] = ["THU","FRI","SAT","SUN","MON","TUE","WED"]
    var numberOfDays: [Int] = [31,29,31,30,31,30,31,31,30,31,30,31]
    
    
    return dayArray[(numberOfDays[0..<a-1].reduce(0,+)+b) % 7]
    }
profile
기억보단 기록, 느리더라도 꾸준히

0개의 댓글