일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- k8s
- Di
- 자바
- 뷰
- SpringMVC
- 해시맵
- programmers
- IntelliJ
- dabase
- map
- 코딩테스트연습
- builder-pattern
- Kubernetes
- vuejs
- ORM
- cd
- hibernate
- 프로그래머스
- 알고리즘
- JPA
- docker
- Oracle
- Spring
- CI
- superBuilder
- CKA
- java
- Vue
- DevOps
- CI/CD
Archives
- Today
- Total
문홍의 공부장
[Java] 프로그래머스 Lv1. 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일같은 날짜는 주어지지 않습니다)
나의 풀이
얼마 전에 DateFormat 클래스에 대한 내용을 복습했기 때문에, 자연스레 Calendar 클래스를 활용해야겠다는 생각이 들었다.
1 2 3 4 5 6 7 8 9 10 | public String solution(int a, int b) { String answer = ""; Calendar cal = Calendar.getInstance(); cal.set(2016, a-1, b); Date date = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("E", Locale.ENGLISH); answer = sdf.format(date).toUpperCase(); return answer; } | cs |
다른 사람의 풀이
Calendar 클래스를 활용한 풀이
캘린더 클래스의 함수를 이용하여 코드를 보다 짧게 만들 수 있었다.
나의 경우 이 함수를 몰라서 Calendar 클래스를 Date 클래스로 파싱하고, 또 SimpleDateFormat 클래스를 이용하여 요일 값을 뽑아오느라 여러 개의 클래스를 import 해와야 했는데, 아래 풀이를 보니 더 간결하고 깔끔하게 문제를 해결할 수 있었다.
1 2 3 4 | public String getDayName(int month, int day) { Calendar cal = new Calendar.Builder().setCalendarType("iso8601").setDate(2016, month - 1, day).build(); return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ko-KR")).toUpperCase(); } | cs |
배열을 이용한 풀이
만년달력형 문제가 아니라, 2016년에 한정하여 문제를 냈기 때문에 배열로 설정하여 해결하는 것도 효율적으로 보인다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public String getDayName(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; } | cs |
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 Lv.1 같은 숫자는 싫어 풀이 (0) | 2020.01.27 |
---|---|
[Java] 프로그래머스 Lv1. 가운데 글자 가져오기 풀이 (0) | 2020.01.27 |
[Java] 프로그래머스 Lv1. 체육복 풀이 (탐욕법 알고리즘 Greedy Algorithm) (0) | 2020.01.26 |
[Java] 프로그래머스 Lv1. 모의고사 풀이 (0) | 2020.01.20 |
[Java] 프로그래머스 Lv1. K번째 수 풀이 (0) | 2020.01.16 |