본문 바로가기
알고리즘/백준

[백준 알고리즘 - 1924] 2007년

by Simple H 2018. 7. 24.

문제 : 오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.


입력 조건 : 첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 

 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.


출력 : 첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.


https://www.acmicpc.net/problem/1924






/**
 * 2018. 7. 23.
 */
package Algorithm;

/**
 * @author SH
 * 문제 : 오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.
 */
public class Algorithm1924 {
	private String[] day = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
	private int[] date= {0,31,28,31,30,31,30,31,31,30,31,30,31};
	private int sum = 0;
	
	public void print(int a, int b){
		for(int i=0;i<a;i++){
			sum += date[i];
		}
		sum = sum + b -1;
		sum = sum % 7;
		System.out.println(day[sum]);
	}
}



이번 문제는 살짝쿵 설명을 추가해보겠습니다.


먼저 입력 조건에 제가 빨간 글씨로 강조한 부분이 핵심적인 부분입니다.



방법이 2가지 정도로 생각하실텐데요..


1. while문안에 switch case문을 이용하는 법


2. for문 한번으로 끝내는 법



위와 같은 방법으로 생각하셨으면 이미 반이상은 푸신거나 다름없으십니다!!



for문을 이용하는 방법으로 구현했으므로 for문으로 설명하겠습니다.



각 월별로 date(날짜)를 알려주었기 때문에, 배열을 선언해서 해당 날짜수 만큼 생성합니다.


저같은 경우는 배열의 1번째는 표면상 첫번째일뿐, 데이터는 0으로 들어가기 때문에 0값을 넣어주었습니다.



해당 월 전까지 일수를 더한 후 남은 일수(b)와 1(1월 1일)을 빼야합니다.


1을 빼는 이유는 날짜를 새는 법 or 배열 선언을 변경하면 안해도 될것같습니다!

(이부분은 확인해볼께요 ㅠ)


그렇게 한 후 나머지 연산을 통하여 해당 값을 배열을 이용하여 출력합니다.



글로 쓰니 어려운데, 소스보시면 금방 이해하실꺼라 생각합니다!



이상 많은 정보를 공유하고싶은 '코승이' 였습니다.


오늘도 좋은 하루보내시고 좋은 마무리를 기원합니다.

(공감은 많은 도움이 됩니다)


댓글