상세 컨텐츠

본문 제목

[Go] 프로그래머스 연습문제 LV1 - 2016년

Go/Programmers

by Gopythor 2022. 5. 28. 22:56

본문

728x90
반응형

문제 설명

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일같은 날짜는 주어지지 않습니다)

입출력 예

abresult
5 24 "TUE"
func solution(a int, b int) string {
    day := []string{"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"}
    month := []int{31,29,31,30,31,30,31,31,30,31,30,31}
    days := -1
    for i:=0; i<a-1; i++{
        days += month[i]
    }
    days += b
    return day[days%7]
}

다른 사람 코드

func solution(a int, b int) string {
    num2day := map[int]string {
        0: "SUN",
        1: "MON",
        2: "TUE",
        3: "WED",
        4: "THU",
        5: "FRI",
        6: "SAT",
    }
    date := 5
    for month := 1; month < a; month++ {
        switch month {
        case 1, 3, 5, 7, 8, 10, 12: date += 31
        case 4, 6, 9, 11: date += 30
        default: date += 29
        }
    }
    return num2day[(date + b - 1) % 7]
}
import "time"

func solution(a int, b int) string {
    week := []string {"SUN","MON","TUE","WED","THU","FRI","SAT"}

    offset := 5

    firstDay := time.Date(2016, 1, 1, 0,0,0,0,time.UTC)
    targetDay := time.Date(2016, time.Month(a), b, 0,0,0,0,time.UTC)    

    diff := targetDay.Sub(firstDay).Hours() / 24    

    return week[(int(diff)+ offset) % 7 ]
}
import "time"

func solution(a int, b int) string {
    days := []string{"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}
    t := time.Date(2016, time.Month(a), b, 0, 0, 0, 0, time.UTC)
    return days[int(t.Weekday())]
}
728x90
반응형

관련글 더보기

댓글 영역