logo

𝝅번째 알파카의 개발 낙서장

screen

[프로그래머스 / JAVA] Level 1 2016년 (12901)

posts

알고리즘

시리즈 톺아보기

프로그래머스

프로그래머스
count

2016년 🔗

랭크 사용 언어
Level 1 JAVA

🔗 2016년

문제 설명 🔗

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"

풀이 🔗

2016년 중 특정 날짜에 해당하는 요일을 요구하는 문제. 날짜 객체를 사용하면 별다른 연산 없이 쉽게 구할 수 있다.

여기서는 Date 객체를 활용하여, yyyy-MM-dd 형태의 문자열을 Date 객체로 변환하여 요일을 빼낼 것이다.

Date.valueOf("yyyy-MM-dd").toLocalDate().getDayOfWeek().getValue()를 통해 요일을 빼낼 수 있다.

다행히 월요일을 1부터 시작해서, 7인 일요일로 끝난다. 간혹 언어나 설정에 따라 1을 일요일로 치거나, 0을 월요일 혹은 일요일로 시작하기도 한다.

코드를 간소화하기 위해 1 ~ 7 사이의 숫자를 입력하면 요일로 반환하는 메서드를 구현한다.

코드 🔗

JAVA

0import java.sql.Date;
1
2/**
3 * 2016년 클래스
4 *
5 * @author RWB
6 * @since 2021.12.12 Sun 03:38:13
7 */
8class Solution
9{
10 /**
11 * 해답 반환 메서드
12 *
13 * @param a: [int] 월
14 * @param b: [int] 일
15 *
16 * @return [String] 해답
17 */
18 public String solution(int a, int b)
19 {
20 String dateStr = new StringBuilder().append("2016-").append(a).append("-").append(b).toString();
21
22 int dayOfWeek = Date.valueOf(dateStr).toLocalDate().getDayOfWeek().getValue();
23
24 return getDayName(dayOfWeek);
25 }
26
27 /**
28 * 요일 이름 반환 메서드
29 *
30 * @param dayOfWeek: [int] 주별 요일 번호
31 *
32 * @return [String] 요일 이름
33 */
34 private String getDayName(int dayOfWeek)
35 {
36 return switch (dayOfWeek)
37 {
38 case 1 -> "MON";
39 case 2 -> "TUE";
40 case 3 -> "WED";
41 case 4 -> "THU";
42 case 5 -> "FRI";
43 case 6 -> "SAT";
44 default -> "SUN";
45 };
46 }
47}