iOS 공부하는 감자

2016년 본문

알고리즘

2016년

DongTaTo 2022. 1. 13. 12:25
반응형

문제 설명

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

제한 조건
  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

a b result
5 24 "TUE"

 

 

 


내 풀이 (2.xx)ms

func solution(_ a:Int, _ b:Int) -> String {
    let dateFormatter: DateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    dateFormatter.timeZone = TimeZone.current

    let calendar: Calendar = Calendar.current

    let date: Date = dateFormatter.date(from: "2016-\(String(a))-\(String(b))")!

    let weekdayArray: [String] = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]

    return weekdayArray[calendar.dateComponents([.weekday], from: date).weekday!-1]
}
  1. 특정 형태의 문자열을 Date타입으로 변환시켜줄 DateFormatter를 생성하고
  2. 생성한 DateFormatter를 통해 입력받은 문자를 Date 형식으로 바꿔준다.
  3. Date타입을 dateComponent 메서드로 weekday 숫자만 추출하여 요일을 찾는다.

 

 

다른사람 풀이👍 (0.0x)ms

func solution(_ a:Int, _ b:Int) -> String {

    let w = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
    let monthDay = [ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    let totalDay = monthDay[0..<a-1].reduce(0, +) + b

    return w[totalDay % 7]
}
  1. 요일을 담은 Array를 생성한다. (1월 1일이 "FRI"라고 주어졌으니 배열의 index 1번을 "FRI"로 맞춰서 생성)
  2. 각 달의 마지막 날짜를 담은 배열을 생성한다.
  3. 입력된 month의 직전 month까지의 모든 day와 매개변수로 주어진 day의 합을 totalDay에 저장한다. (0..<a-1 보다 0...a-2로 표현했으면 더 보기 편했을거 같다..(?))
  4. totalDay에 %7 연산으로 요일을 찾아낸다.
반응형

'알고리즘' 카테고리의 다른 글

나머지가 1이 되는 수 찾기  (0) 2022.01.16
[1차] 비밀지도  (0) 2022.01.15
체육복  (0) 2022.01.12
모의고사  (0) 2022.01.11
예산  (0) 2022.01.10