coding test/programmers

[Programmers]2016(JAVA)-LEVEL 1

쥬냥냥 2022. 8. 6. 01:01

< 문제 설명 >

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로 받아 사이 문자열 모두 리턴