카테고리 없음

[백준] 1924 : 2007년(JAVA) - 특정 날짜 요일 구하기 자바

송테이토 2022. 11. 7. 14:42

특정 날짜 요일 구하기 (숫자)

mport java.time.DayOfWeek;
import java.time.LocalDate;
 
public class GetDayOfWeek {
    public static void main(String[] args) {
 
        // 1. LocalDate 생성
        LocalDate date = LocalDate.of(2021, 12, 25);
        // LocalDateTime date = LocalDateTime.of(2021, 12, 25, 1, 15, 20);
        System.out.println(date);  // // 2021-12-25
 
        // 2. DayOfWeek 객체 구하기
        DayOfWeek dayOfWeek = date.getDayOfWeek();
 
        // 3. 숫자 요일 구하기
        int dayOfWeekNumber = dayOfWeek.getValue();
 
        // 4. 숫자 요일 출력
        System.out.println(dayOfWeekNumber);  // 6
 
    }
}

특정 날짜 요일 구하기(영문, 한글)

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
 
public class GetDayOfWeek {
    public static void main(String[] args) {
 
        // 1. LocalDate 생성
        LocalDate date = LocalDate.of(2021, 12, 25);
        System.out.println(date); // 2021-12-25
 
        // 2. DayOfWeek 객체 구하기
        DayOfWeek dayOfWeek = date.getDayOfWeek();
 
        // 3. 텍스트 요일 구하기 (영문)
        System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.US));  // Saturday
        System.out.println(dayOfWeek.getDisplayName(TextStyle.NARROW, Locale.US));  // S
        System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US));  // Sat
 
        // 4. 텍스트 요일 구하기 (한글)
        System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.KOREAN));  // 토요일
        System.out.println(dayOfWeek.getDisplayName(TextStyle.NARROW, Locale.KOREAN));  // 토
        System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.KOREAN));  // 토
 
        // 5. 텍스트 요일 구하기 (default)
        System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault()));  // 토요일
 
    }
}

방법1. LocalDate와 switch-case로 풀기

package Day1106;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.StringTokenizer;

public class B1924 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		int x = Integer.parseInt(st.nextToken());
		int y = Integer.parseInt(st.nextToken());

		// 특정 날짜 요일 구하기
		LocalDate date = LocalDate.of(2007, x, y);
		DayOfWeek dayOfWeek = date.getDayOfWeek();
		int dayOfWeekNumber = dayOfWeek.getValue();

		// 숫자 요일 출력
		String result = "";
		switch (dayOfWeekNumber) {
		case 1:
			result = "MON";
			break;
		case 2:
			result = "TUE";
			break;
		case 3:
			result = "WED";
			break;
		case 4:
			result = "THU";
			break;
		case 5:
			result = "FRI";
			break;
		case 6:
			result = "SAT";
			break;
		case 7:
			result = "SUN";
			break;
		}
		System.out.println(result);
	}

}

방법2. dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US).toUpperCase()) 사용하기

package Day1106;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
import java.util.StringTokenizer;

public class B1924_2 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		int x = Integer.parseInt(st.nextToken());
		int y = Integer.parseInt(st.nextToken());

		// 특정 날짜 요일 구하기(영문 대문자)
		LocalDate date = LocalDate.of(2007, x, y);
		DayOfWeek dayOfWeek = date.getDayOfWeek();

		System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US).toUpperCase()); // Sat
	}

}

두번째 방법이 코드가 훨씬 짦아 시간도 단축될거라 생각했늗네

오히려

2배가까이 소요되었다…

방법3 -배열

다른 사람들은 어떻게 풀었나 보는데 다들 배열을 이용해서 비교하는 방법을 사용했길래

다시 풀어보았다.

package Day1106;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B1924_3 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		int x = Integer.parseInt(st.nextToken());
		int y = Integer.parseInt(st.nextToken());

		int[] month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		String[] dayOfWeek = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };

		// 월 다 더하기
		int result = 0;
		for (int i = 0; i < x; i++) {
			result += month[i];
		}

		// x달의 추가적 y일수 다 더하기
		result += y - 1;
		System.out.println(dayOfWeek[result % 7]);

	}

}
  1. 배열로 구하기
  2. LocalDate와 switch-case로 풀기
  3. dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US).toUpperCase()) 사용하기

순으로 시간이 빠르다.