1월 24일 TIL

이승원·2024년 1월 24일
0

TIL

목록 보기
7/75
post-thumbnail

프로그래머스 코딩테스트 [ 2016년 ]

Github 링크

  • 이 문제는 단순히 날짜가 주어지고, 해당 날짜의 요일을 계산해서 출력하는 문제다.
  • 우선 내가 처음으로 생각한 솔루션은 당연히 각 월마다 몇일 있는지를 아니깐, 각 월의 일수 대로 Array를 만들고, 계산을 해야되나 생각을 했었는데, 다른 방법을 한번 써보자 해서 DateComponents()를 써보게 되었다.
import Foundation 

func solution(_ a:Int, _ b:Int) -> String {
    //원하는 날짜 설정
    var date = DateComponents()
    date.year = 2016
    date.month = a
    date.day = b
    
    // DateFormatter를 통해 출력하는 방식을 설정 
    // "EE" -> Weekday with Three characters only (eg: MON, TUE...)
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "EE"
    
    //날짜를 현재 Calendar에 맞는 형식으로 설정 후 계산
    let dates = Calendar.current.date(from:date)!
    let weekdayString = dateFormatter.string(from: dates)

    return weekdayString.uppercased()
}
  • DateComponents()를 통해 원하는 연도,월,일을 설정할 수 있다. DateComponents로 만든 date는 Date타입이 아니다. 따라서 dates = Calendar.current.date(from:date)! 로 Date 타입으로 변환해줘야 한다. ! 느낌표를 쓴 이유는 optional 언래핑, 왜냐하면 해당 날짜가 존재하지 않을 수 있으니깐, 하지만 문제에서 실제로 있는날만 제공한다고 하니깐 강제로 언래핑!
  • 그리고 dateFormatter.dateFormat = "EE"를 쓴 이유는 나는 요일만 원하기 때문이다. 만약 다르게 출력하고 싶다면?

"yyyy": 4자리 연도를 표시합니다. (예: 2024)
"yy": 2자리 연도를 표시합니다. (예: 24)
"MMMM": 월의 전체 이름을 표시합니다. (예: 1월, 2월)
"MMM": 월의 축약된 이름을 표시합니다. (예: 1월, 2월)
"MM": 2자리 숫자로 된 월을 표시합니다. (예: 01, 02)
"M": 1자리 숫자로 된 월을 표시합니다. (예: 1, 2)
"dd": 2자리 숫자로 된 일을 표시합니다. (예: 01, 02)
"d": 1자리 숫자로 된 일을 표시합니다. (예: 1, 2)
"EEEE": 요일의 전체 이름을 표시합니다. (예: 월요일, 화요일)
"EEE": 요일의 축약된 이름을 표시합니다. (예: 월, 화)
"HH": 24시간 형식으로 된 시간을 표시합니다. (예: 01, 02)
"H": 24시간 형식으로 된 시간을 표시합니다. (예: 1, 2)
"hh": 12시간 형식으로 된 시간을 표시합니다. (예: 01, 02)
"h": 12시간 형식으로 된 시간을 표시합니다. (예: 1, 2)
"mm": 2자리 숫자로 된 분을 표시합니다. (예: 01, 02)
"m": 1자리 숫자로 된 분을 표시합니다. (예: 1, 2)
"ss": 2자리 숫자로 된 초를 표시합니다. (예: 01, 02)
"s": 1자리 숫자로 된 초를 표시합니다. (예: 1, 2)
"a": 오전/오후를 표시합니다. (예: 오전, 오후)

  • 조금 다르게 풀어보긴 했지만, 이러한 풀이는 실제 달력과 똑같은 경우에만 사용 가능하고, 가상의 날짜에서는 틀리게 작동하니 주의하자.
profile
개발자 (진)

0개의 댓글