포스트

208. 2016년


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
func solution(_ a:Int, _ b:Int) -> String {
    
    var day = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    var total = 0
    
    if a != 1 {
        for i in 0..<a-1 {
            total+=day[i]
        }
        total = total + b
    } else {
        total = b
    }
    
    switch total%7 {
        case 1 :
            return "FRI"
        case 2 :
            return "SAT"
        case 3 :
            return "SUN"
        case 4 :
            return "MON"
        case 5 :
            return "TUE"
        case 6 :
            return "WED"
        default :
            return "THU"
    }
}

일단 요일을 보고 전체 일수에서 7을 나눈 나머지를 기준으로 하면 되겠다라는 판단이 섰다.

그래서 day라는 배열을 만들고 각 수를 집어 넣어 줬다.

그리고 for문을 사용해서 더해주는데, 저기 조건에선 1일때 에러가 발생하기 때문에, 1월이 아닐때만 for문이 돌고 1월일땐 b값만 들어가게 해주었다.

그리고 7을 나눈 나머지를 사용하기 위해 switch case문을 사용하였다.

1월 1일이 금요일 이므로 나머지가 1일때는 금요일이기에, 그것을 기준으로 쭉 적었고

결과값을 바로 리턴하게 하였다.

그리고 일어나서 문제를 복기하다가 이런 생각이 들었다.

조금이라도 간소화 할수는 없을까?

그래서 한달도 7로 나눈 나머지가 값으로 모두 전환 하였다.

그리고나서 합을 구할때도 reduce를 사용하여 좀 더 식을 간소화 하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func solution(_ a:Int, _ b:Int) -> String {
    
    var day = [3, 1, 3, 2, 3, 2, 3, 3, 2, 3, 2, 3]
    var total = 0

    total = a != 1 ? day[0..<a-1].reduce(0,+) + b : b
    
    switch total%7 {
        case 1 :
            return "FRI"
        case 2 :
            return "SAT"
        case 3 :
            return "SUN"
        case 4 :
            return "MON"
        case 5 :
            return "TUE"
        case 6 :
            return "WED"
        default :
            return "THU"
    }
}

그리고 switch case문 대신 배열값으로 리턴하는것도 괜찮지 않을까? 싶어서

다음과 같이 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
func solution(_ a:Int, _ b:Int) -> String {
    
    var day = [3, 1, 3, 2, 3, 2, 3, 3, 2, 3, 2, 3]
    var week = ["THU","FRI", "SAT", "SUN", "MON","TUE","WED"]
    var answer = ""
    var total = 0

    total = a != 1 ? day[0..<a-1].reduce(0,+) + b : b
    
    answer = week[total%7]
    
    return answer
}

팀원 발표용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func solution(_ a:Int, _ b:Int) -> String {
    
    var day = [3, 1, 3, 2, 3, 2, 3, 3, 2, 3, 2, 3]
    // 월별 일수를 7로 나눈 나머지 값
    
    var week = ["THU","FRI", "SAT", "SUN", "MON","TUE","WED"]
    // 요일을 배열로 0     1      2      3      4     5     6
    
    var answer = ""
    
    var total = 0

    total = a != 1 ? day[0..<a-1].reduce(0,+) + b : b
    //      -------- ----------------------------  ---
    //    1월이 아니라면?            True             False
    //                              ↓  ⠀    ⠀ ⠀     ↓
    //                a월까지의 일수를 더하고 b일을 더한다   ↓
    //                                      1월이면 b일만 넣어준다
    
    answer = week[total%7]
    // 결과값을 7로나눈 나머지의 값을 인덱스로 하여 그에 해당하는 요일을 리턴한다
    
    return answer
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.