알고리즘 : 프로그래머스 : JAVA : 2016년

2022. 1. 17. 14:12알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

class Solution {
  public String solution(int a, int b) {
      int total = 0;
      String w[] = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};     // 2016년은 윤년이므로 2월은 29일로 설정
      int m[] = {31, 29, 31, 30, 31, 30,31, 31, 30, 31, 30, 31};
      for(int i =0;i<a-1;i++){    // 월마다 일수 더해주기
          total += m[i];
      }
      total += b-1;     // 1월 1일부터 시작했으므로 -1 처리
      String answer = w[total%7];
      return answer;
  }
}

1. 우선 total이라는 총 일수를 만들어주고, “2016년 1월 1일은 금요일입니다.”라는 힌트를 얻어 금요일부터 일주일의 문자열을 문자열 배열로 만들어 준다.
2. 일수를 저장하기 편하게 정수 배열도 만든다.
3. for문으로 1월부터 날짜를 누적해주고, 매개변수 b로 들어온 정수도 더해준다.
4. 7로 나눈 나머지에 따라 달라지는 w 배열을 answer로 내보낸다.


<다른 방법>

class Solution {
      public String solution(int a, int b) {
          String answer = "";
          
          String[] day = {"SUN","MON","TUE","WED","THU","FRI","SAT"};
          String[] year = new String[366];
          int[] month = {31,29,31,30,31,30,31,31,30,31,30,31};
          int want_day = 0;
          
          //1월 1일이 금요일이기에 (i+5)를 하여 금요일을 시작으로 만들었다.
          for(int i=0; i<year.length; i++) {
              year[i] =  day[(i+5)%7];
          }
          
          for(int i=0; i<a-1; i++) {
              want_day += month[i]; 
          }
          
          //1월 1일도 하루 지난 것으로 되어서 -1을 해야한다!
          want_day += b-1;
          
          answer = year[want_day];
          
          return answer;
      }
    }

1. 각 월이 몇일까지 있는지 센다.
2. 각 월별 날짜를 배열로 만들고 1월 1일을 금요일이라 생각하고 나머지연산자를 이용한다.
3. 원래 1월 1일이 월요일이라면 그냥 i%7을 하면 되지만 금요일이기 때문에 (i+5)%7 을 사용한다.
4. 마지막에 want_day += b-1 에서 -1을 한 이유는 -1을 하지 않으면 1월 1일도 하루가 지난 것으로 치기 때문에 -1을 사용.

반응형