[2020-11-04] 2016년

2020. 11. 4. 16:17코딩테스트

푼 시간 : 1시간

언어 : 자바

 


 

programmers.co.kr/learn/courses/30/lessons/12901

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

 

처음엔 쉬운 문제라 생각해서 되게 금방 풀겠지 했는데

생각보다 시간이 오래걸린 문제

 

a는 달, b는 일 (테스트케이스는 a=5, b=24)

2016년은 윤년이기때문에 366일이고, 2월에 29일이라서

month배열에 2번째 값에 29를 넣어주었다. 1월1일 금요일부터 시작이기 때문에

week의 첫 값은 금요일이다. 카운트 변수를 따로 만들어 쓰었고, 

테스트케이스에 맞추다보니 코드 채점하고 제출을 하고나서 틀린점이 두가지 있었다.

 

원래 처음에 week변수를 안 만들고 시작을 해버려서 그냥 case문으로 돌렸었는데

코드가 너무 지저분해서 week변수를 만들고 answer에 넣었으나 실수로

week[count%7]을 해버려서 바로 바꿔버렸다.

 

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        int []month={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String []week= {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
        int count=0;
        
        for(int i=0; i<month.length; i++){
            if(i==a)
                break;
                // i가 0부터 시작하기 때문에 a(달)과 같아지면 break
            
            for(int j=0; j<month[i]; j++){
                if(i==a-1&&j==b)
                    break;
                // i가 달(a-1)과 같고, j의 크기가 b와같으면 break
                // 일부러 count보다 위에 두어 count가 되기전에 break시켰다.
                
                count+=1;
            }
        }
        answer=week[(count-1)%7];
        // count가 0부터 시작하기때문에 무조건적으로 한번은 돌아가고, 그 다음부터
        // 조건이 성립한다. 그래서 count-1
        
        return answer;
    }
}

 

앞으로 문제를 얕잡아보면 안되겠다.

아무 생각없이 그냥 풀었는데 10분 20분

지나다보니 구조적으로 좀 더 생각해보고

풀어야 하는게 맞는 것 같다.