< 문제 설명 >
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일같은 날짜는 주어지지 않습니다)
< 코드 및 풀이 >
*Programmers에서도 정확성 테스트 통과, eclipes에서 직접 월과 일 입력받아 해당 일의 요일을 출력 한 코드
1. 2016년이 금요일로 시작하며 윤년이니 2월만 29일이다. 이를 이용해 day라는 배열에 각각 요일의 이름이
든 배열과 각 월의 일 수가 든 month를 통해 입력받은 a월 b일의 전체 일수를 7일로 나눈것이 해당되는
day의 idx 값을 리턴하면된다.
import java.util.Scanner;
public class Years2016 {
public static String solution(int a, int b) {
String []day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THE"};
int []month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int date = 0;
for(int i=0; i<a;i++) {
date += month[i];
}
String answer = day[date%7]; //전체 일수를 7로 나눈 나머지의 요일에 해당
return answer;
}
public static void main(String[] args) {
int a, b;
Scanner sc = new Scanner(System.in);
System.out.println("월을 입력하십시오.");
a = sc.nextInt();
System.out.println("일을 입력하십시오.");
b = sc.nextInt();
System.out.println("2016년 "+a+"월"+b+"일은"+solution(a, b)+"입니다.");
}
}
2. Local Date.of().getDayoofweek를 이용해 2016년 a월 b일의 요일의 정보를 문자 처리해 한 줄로 정리한 코드
import java.time.*;
public static String solution(int a, int b) {
return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
} //localdate로 입력받은 값의 요일을 문자열로 받아 3번째까지 출력
<알게 된 사실 & 중요한 점>
처음에는 2016년의 특징인 2월이 29일인 점, 1일이 금요일인 점을 통해 문제를 단순히 생각해 풀었다.
하지만 찾아보면서 localdate라는 함수로 시간에 대한 정보를 바로 받아올 수 있다는 점이 신기하고 자바의 문법에는
간편하며 좋은 기능이 다양히 있으며 이를 잘 활용해 나중에 커다란 알고리즘을 짜보고 싶다 생각이 들며
학습에 대한 의지가 더 강해진 것 같다.
1. LocalDate를 통해 간단히 한 줄로 코드를 정리할 수 있다.
- import java.time ~ -> 사용 전 import 필요
- LocalDate -> 날짜 정보만 출력
- LocalDate.of(년, 월, 일, ...).getDayof<선택> -> (년, 월, 일)의 <선택> 정보만 가져옴
2. toString을 통해 문자열로 날짜 정보를 반환할 수 있다.
- 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
ex) File file = new File(“\love is good”);
Syste.out.println(file.toString()); -> \love is good
3. substring을 통해 원하는 idx의 정보만 받아 올 수 있었다.
- substring(n) : 입력받은 n(인자값)을 index로 해당위치를 포함해 그 이후 모든 문자열 리턴
- substring(n, n2) : 시작 인덱스를 n, 마지막을 n2로 받아 사이 문자열 모두 리턴
'coding test > programmers' 카테고리의 다른 글
[Programmers] 이상한 문자 만들기(JAVA)-Level 1 (0) | 2022.08.09 |
---|---|
[Programmers]완주하지 못한 선수(JAVA)-Level 1 (0) | 2022.08.07 |
[Programmers] 수박수박수박수박수?(JAVA)-LEVEL 1 (0) | 2022.08.07 |
[Programmers]나누어 떨어지는 숫자 배열(JAVA)-LEVEL 1 (0) | 2022.08.06 |