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 |
나의 코드⭐
(library를 쓰지않고 문제를 푸는 방법은
#3알고리즘 연습 -요일찾아주기 -PYTHON의 아이디어를 참고)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; import java.util.Locale; import java.time.DayOfWeek; class Solution { public String solution(int a, int b) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyyy"); //DateTimeFormatter는 자주쓰이는 다양한 형식 정의 ofPattern은 출력형식을 정의하는것으로
19/4/2019 이런식으로 정의해준 것이다
LocalDate date = LocalDate.parse(String.valueOf(b)+"/"+String.valueOf(a)+"/2016", formatter); LocalDate는 참조변수로 date의 형식을 날짜로 표현
toUpperCase를 사용해서 출력값을 모두 대문자로 변환 } } |
다른 풀이⭐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import java.util.*; class Solution{ public String getDayName(int month, int day){ Calendar cal = new Calendar.Builder().setCalendarType("iso8601") //Calendar객체를 빌더패턴을 이용해 생성하고 .setDate(2016, month - 1, day).build(); setter를 이용해 iso8601(날짜,시간관련국제표준)
로 CalendarType을 설정하고 Date를 설정해줬다
return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ko-KR")).toUpperCase(); } #Calendar의 getDisplayName(int field, int style, Locale locale) 이 되고 return하는 형식으로는 String과 MAP(String, integer)가 잇다.
Calendar의 field DAY_OF_WEEK 를 argument값으로 넣어준것을 알수 있다. } |
추가로 알아두면 좋을 것들
1-1
날짜를 나타내고 싶으면 LocalDate
날짜와 시간을 담고 싶으면 : LocalDateTime
시간만 나타내고 싶으면 LocalTime
1-2
LocalDate.parse("YYYYMMDD", DateTimeFormatter.BASIC_ISO_DATE);
LocalDate -> String
LocalDate.of(YYYY,MM,DD).format(DateTimeFormatter.BASIC_ISO_DATE);
2. DayOfWeer.getDispalay
getDisplayName(TextStyle, Locale)
날짜를 위와 같은 방법으로 String으로 나타낼수있는데
TextStyle에는 FULL,NARROW,SHORT 등이 있고
Locale의 field로는 많은 나라와 언어들이 있기떄문에 구글링을 통해 찾도록하자
3 .빌더패턴에 대해 간단히
디자인패턴의 한 종류로 생성자가 많은 인자를 받는 경우 or 선택적으로 인자를 받는경우에 효율적으로 사용할 수 있다. 빌더객체를 만든 후 빌더객체에 정의된 설정 메서드를 이용하여 인스턴스를 생성하는 것
4 . Getter 와 Setter는 왜 쓸까
Private으로 선언된 변수에 접근 할수 있게 한다(이 argument의 검증절차를 거쳐 무결성을 유지할수 있다.
출처: 프로그래머스(https://programmers.co.kr)