잉?

[프로그래머스] lv.1 2016년 (JAVA 자바) 본문

알고리즘_Algorism/프로그래머스

[프로그래머스] lv.1 2016년 (JAVA 자바)

Jye_647 2023. 8. 18. 10:29
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


첫 번째 풀이 - [19.56ms - 28.69ms]

  1. Calendar 인스턴스 생성
  2. set()을 이용하여 구하고자 하는 년, 월, 일 입력
  3. getDisplayName로 요일을 텍스트로 리턴

두 번째 풀이 - [0.02ms - 0.07ms]

  1. dat배열에 요일, date배열에 달의 수를 입력
  2. 구하고자 하는 요일까지 더한 후 7일로 나눈 나머지 리턴

첫 번째 풀이 코드

public String solution(int a, int b) {
    // Calendar 인스턴스 생성
    Calendar calendar = Calendar.getInstance();
    // Calendar 월은 0부터 시작
    calendar.set(2016, a-1, b);
    // getDisplayName: 요일을 텍스트로 리턴
    return calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US).toUpperCase();
}

java.util.Calendar 클래스

Calendar 클래스는 자바에서 날짜와 시간에 관한 데이터를 손쉽게 처리할 수 있도록 제공하는 추상 클래스입니다.

이 클래스가 추상 클래스로 선언된 이유는 나라마다 사용하는 달력 체계가 조금씩 다를 수 있기 때문입니다.

Month가 1부터 시작하는 게 아니라 0부터 시작한다는 불편한 점이 있습니다.

public String getDisplayName(int field, int style, Locale locale)

DAY_OF_WEEK의 리턴되는 숫자는 1~7로, 1은 일요일, 7은 토요일을 나타냅니다.

Calendar 클래스의 getDisplayName() 메서드는파라미터로 전달받은 field의 값을 style과 locale을 적용하여 텍스트로 리턴합니다.


두 번째 풀이 코드

public String solution(int a, int b) {
    // 2016년 1월 첫요일이 금요일
    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;
    // date 배열이 0부터 시작해서 해당 달은 포함 X
    for (int i = 0; i < a-1; i++) {
        allDate += date[i];
    }

    // allDate가 0부터 시작해서 -1
    allDate += (b-1);

    return day[allDate % 7];
}
Comments