2016년

문제 링크

2016년

분석

1월 1일부터 ab일까지의 총 일수를 구한뒤, 요일의 개수(7)로 나누면 해당 날짜가 어떤 요일인지 구할 수 있습니다.

각 월마다 일수가 다르므로 각 월의 일수를 저장한 배열을 만들어야합니다.
2016년 2월은 윤년이므로 29일입니다.

각 요일을 저장한 배열또한 만들어두어야합니다.
1월 1일이 금요일부터이므로 배열의 시작도 금요일부터 시작이어야합니다.

풀이

#include <string>
#include <vector>

std::string solution(int a, int b) {
    std::string answer = "";
    int totalDate = 0;
    
    std::vector<std::string> week{ "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED" };
    std::vector<int> date{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    for (int i = 0; i < a - 1; ++i)
    {
        totalDate += date[i];
    }
    
    totalDate += b;
    
    answer = week[totalDate % 7];
    
    return answer;
}

반복문으로 각 월의 일수를 더해 총 일수를 구하고, 마지막 a달에는 b에 대한 일수만 포함해야합니다.

총일수를 구했다면 요일의 개수인 7로 나눈다면 해당하는 요일의 값이 나옵니다.

성능 요약

시간 복잡도는 $O(n)$입니다.
공간 복잡도는 $O(1)$입니다.

테스트 1 〉 통과 (0.01ms, 4.15MB)
테스트 2 〉 통과 (0.01ms, 4.2MB)
테스트 3 〉 통과 (0.01ms, 4.01MB)
테스트 4 〉 통과 (0.01ms, 4.14MB)
테스트 5 〉 통과 (0.01ms, 4.13MB)
테스트 6 〉 통과 (0.01ms, 4.18MB)
테스트 7 〉 통과 (0.01ms, 4.2MB)
테스트 8 〉 통과 (0.01ms, 4.12MB)
테스트 9 〉 통과 (0.01ms, 3.61MB)
테스트 10 〉 통과 (0.01ms, 4.11MB)
테스트 11 〉 통과 (0.01ms, 3.61MB)
테스트 12 〉 통과 (0.01ms, 4.13MB)
테스트 13 〉 통과 (0.01ms, 3.68MB)
테스트 14 〉 통과 (0.01ms, 4.14MB)

Programmers 카테고리 내 다른 글 보러가기

댓글남기기