본문 바로가기
Coding Test/Go

[프로그래머스] 2016년 Go Code

by giem 2022. 8. 20.
반응형

이전 포스트에 이어

프로그래머스 2016년을 Go lang으로 풀어보겠다.

 

다른 언어 풀이를 보고 싶다면 아래 링크를 확인해보자

2022.08.20 - [Coding Test/Python] - [프로그래머스] 2016년 Python Code

2022.08.20 - [Coding Test/C++] - [프로그래머스] 2016년 C++ Code

2022.08.20 - [Coding Test/JavaScript] - [프로그래머스] 2016년 JavaScript Code


문제


구현

구현은 2016년 안에서만 계산하면 되기 때문에

모든 월의 일 수와 요일들을 배열에 넣고

결괏값을 계산했다.

 

코드로 보겠다.


코드
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}
    sum := 0
    
    for i := 0; i<a-1; i++ {
        sum += month[i]
    }

    sum += b-1

    return day[sum % 7]
}

a-1까지 반복문을 돌아서

month를 sum 해서 추가하고 일을 추가해서 계산할 수 있게 했다.

 

day 배열은 mod(%) 연산과 맞게 하기 위해

금요일부터 배열에 넣었다.


다른 풀이

Go에서도 출제자의 의도를 회피하기 위해 time를 써서 풀어보았다

import "time"
func solution(a int, b int) string {
    t := time.Date(2016, time.Month(a), b, 0, 0, 0, 0, time.UTC)
    day := [...]string{"SUN", "MON", "TUE", "WED", "THU","FRI", "SAT"}

    return day[int(t.Weekday())]
}

time.Date로 시간을 만들고 t.Weekday()로 시간을 가져왔다.

 

여기서 time.Month를 했는데 이것을 하지 않으면 int타입을 바꿀 수 없다고 에러가 발생해서

time.Month를 사용해서 넣어 주었다.

 

이 방법도 여러 연도가 있다면 훨씬 괜찮은 방법이고 아주 간단하게 풀 수 있다.

 

이렇게 Python, C++, JS, Go로 프로그래머스 2016년을 풀어보았다.

반응형

댓글