[프로그래머스] Lv1 2016

박준수·2022년 6월 29일

프로그래머스

목록 보기
1/1

이 문제를 보고 처음에는 월과 일을 나뉘어 나머지 계산을 사용하여 몇요일인지 구하자 라는 생각으로 접근하였다.

string solution(int a, int b) {
    string answer = "";
    int day = b%7
    switch(a){
            
        case 1:
        
        if (day == 1) answer = "FRI";
        else if(day == 2) answer = "SAT";
        else if(day == 3)answer = "SUN";
        else if(day == 4)answer = "MON";
        else if(day == 5) answer = "TUE";
        else if(day == 6) answer = "WED";
        else if(day == 0) answer = "THU";
            
        case 2:
        
        if (day == 1) answer = "FRI";

이런식으로 말이다. 하지만 이 방식은 너무 코드가 길고 유용하지 않다.
이렇게 구현해야지한 생각은 이미 쓰레기 코드라고 인지하곤 있었다. 분명 이 방법 말고도 간단하고 이해하기 쉬운 코드가 있을거라 생각했다. 하지만 생각을 더 나아가지못하고 구글링을 했다. 역시나 있었다.

 string solution(int a, int b) {
    string answer = "";
    int sum = 0;
    int months[12] = {31, 29, 31, 30, 31,30, 31,31,30 ,31, 30,31};
    string day[7] = {"FRI", "SAT","SUN", "MON", "TUE", "WED", "THU" };
    for(int i = 0; i < a-1; i++){
        sum = sum + months[i];
}
    sum = sum + (b-1);
    answer = day[sum%7];
    return answer;
}

months배열에는 2016 각 달의 일수를 저장한다.
day배열에는 FRI 부터 시작하는 요일을 저장한다.
핵심은 for문을 통해 입력한 월의수(a)전까지 일수를 더하는 것이다.
해당 일(b)을 더한다. 배열은 0 부터 시작이기에 b-1을 더해준다.
다 더한 일수를 7로 나눈 나머지(인덱스로 사용)에 해당하는 요일을 반환해주면 끝이다.

조금 더 창의적으로 생각했으면 풀었을지도 모르겠다.
그래도 구글링을 통해 창의적인 방법을 습득했으니 조금의 위안을 해야겠다.

profile
방구석개발자

0개의 댓글