컴퓨터 프로그래밍/알고리즘

프로그래머스_2016년

깝돌이 2020. 5. 23. 10:41

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

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요.

제한 조건

  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

 a       b      result

5 24 TUE

<내풀이>

1. 전체 일수를 구합니다. 

1-1 hashmap으로 각 달의 일수를 만들어 놉니다.

1-3 for 문을 통해서 그 전 달까지 일수를 더하고 b를 더해줍니다. 

2. 전체 일수를 7로 나눠줍니다. 나누기합니다.

3. 나머지가 1이면 금요일 2이면 토요일 등등 (switch문으로 합니다. )

4. 값을 리턴해줍니다.

// 내풀이_1
    public static String solution(int a, int b) {
        String answer = "";
        int mtodays =0;
        HashMap<Integer, Integer> hm = new HashMap<>();
        hm.put(1,31); 
        hm.put(2,29); 
        hm.put(3,31); 
        hm.put(4,30); 
        hm.put(5,31); 
        hm.put(6,30); 
        hm.put(7,31); 
        hm.put(8,31); 
        hm.put(9,30); 
        hm.put(10,31); 
        hm.put(11,30); 
        hm.put(12,31); 
        
        for(int i = 1; i<a; i++) {
        	mtodays+=hm.get(i);
        }
        mtodays+=b;
        System.out.println(mtodays%7);
        switch(mtodays%7){
        case 0:
        	answer= "THU";
        	break;
        case 1:
        	answer= "FRI";
        	break;
        case 2:
        	answer= "SAT";
        	break;
        case 3:
        	answer= "SUN";
        	break;
        case 4:
        	answer= "MON";
        	break;
        case 5:
        	answer= "TUE";
        	break;
        case 6:
        	answer= "WED";
        	break;
        }
		return answer;        
    }

다른 풀이도 머 크게 차이는... 없습니다.