https://www.acmicpc.net/problem/1924
2798번: 블랙잭
문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버젼의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게
www.acmicpc.net

풀이
1. Calendar 함수를 이용(java.util.Calendar)
=> Calendar cal = Calendar.getInstance(); 선언시 오늘 날짜로 객체가 생성되며
cal.set(year, month-1, day); 로 특정 날짜로의 변경도 가능하다.
cal.get(Calendar.DAY_OF_WEEK); 사용시 해당 날짜의 요일을 숫자 값으로 알 수 있는데 순서대로 일(1), 토(7) 순서이다.
입력받은 날짜를 set 함수로 설정해 준 후 각 요일명을 넣어둔 배열에서 인덱스를 찾아 출력한다
2. 직접 달력의 날짜를 계산
=> 각각의 월마다 끝 날짜가 주어졌으므로 입력받은 월의 전월까지 일수를 계산하고, 입력받은 일의 날짜를 더한 숫자에서 나누기 7을 하여 요일을 매핑한다. 여기서는 나머지가 1인 경우 월요일, 나머지가 6인경우 토요일이다.
소스코드
// 1번 방법
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String[] week = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
Calendar c = Calendar.getInstance();
c.set(2007, a-1, b);
int day_of_week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(week[day_of_week-1]);
}
}
// 2번 방법
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int day = b;
int[] month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] week = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
for(int i=0; i<a-1; i++)
day += month[i];
System.out.println(week[day%7]);
}
}
https://www.acmicpc.net/problem/1924
2798번: 블랙잭
문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버젼의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게
www.acmicpc.net

풀이
1. Calendar 함수를 이용(java.util.Calendar)
=> Calendar cal = Calendar.getInstance(); 선언시 오늘 날짜로 객체가 생성되며
cal.set(year, month-1, day); 로 특정 날짜로의 변경도 가능하다.
cal.get(Calendar.DAY_OF_WEEK); 사용시 해당 날짜의 요일을 숫자 값으로 알 수 있는데 순서대로 일(1), 토(7) 순서이다.
입력받은 날짜를 set 함수로 설정해 준 후 각 요일명을 넣어둔 배열에서 인덱스를 찾아 출력한다
2. 직접 달력의 날짜를 계산
=> 각각의 월마다 끝 날짜가 주어졌으므로 입력받은 월의 전월까지 일수를 계산하고, 입력받은 일의 날짜를 더한 숫자에서 나누기 7을 하여 요일을 매핑한다. 여기서는 나머지가 1인 경우 월요일, 나머지가 6인경우 토요일이다.
소스코드
// 1번 방법
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String[] week = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
Calendar c = Calendar.getInstance();
c.set(2007, a-1, b);
int day_of_week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(week[day_of_week-1]);
}
}
// 2번 방법
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int day = b;
int[] month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] week = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
for(int i=0; i<a-1; i++)
day += month[i];
System.out.println(week[day%7]);
}
}