본문 바로가기
알고리즘/프로그래머스

[알고리즘 / JAVA] 프로그래머스 - 2016년

by 코딩 시그널 2022. 4. 5.
반응형

    문제 설명

    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"

    내 풀이 방법

    아래는 저의 풀이 방법입니다. Calendar 클래스를 이용해서 쉽게 구할 수 있었습니다.

    여기서 참고해야 될 사항은 월에서 -1를 했는데 Calendar 클래스의 Month는 0부터 시작하기 때문입니다.

    import java.util.*;
    class Solution {
    	 public String solution(int a, int b) {
    		 String day = "" ; 
    
    		 Calendar cal = Calendar.getInstance(); 
    		 cal.set(2016,a -1,b);
    		 int dayNum = cal.get(Calendar.DAY_OF_WEEK); 
    		 switch(dayNum){ 
    		 	case 1: day = "SUN"; 
    		 	break; 
    		 	case 2: day = "MON"; 
    		 	break; 
    		 	case 3: day = "TUE"; 
    		 	break; 
    		 	case 4: day = "WED"; 
    		 	break; 
    		 	case 5: day = "THU"; 
    		 	break; 
    		 	case 6: day = "FRI";
    		 	break; 
    		 	case 7: day = "SAT"; 
                		break; 
    		 } 
    		 return day ;
    	 }
    }

     

    다른 사람 풀이

    아래의 풀이는 프로그래머스에 있는 다른 사람 풀이입니다.  Java 8 부터 java.time(joda.time) api 출시하였습니다.

    이를 이용하니 보다 쉽게 원하는 결과 값을 얻을 수 있는 것을 볼 수 있었습니다.

    import java.time.*;
    class Solution {
      public String solution(int a, int b) {
          return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
      }
    }

     

    아래는 배열을 이용한 풀이 입니다. 2016년에 한정하여 문제를 냈기 때문에 아래와 같이 푸는 방법도 하나의 방법일 수 도 있을 거 같습니다.

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

    댓글