입력한 날짜의 요일을 구해보자

bethe·2022년 7월 29일
0

Java

목록 보기
13/14

1. 문제 : 연, 월, 일을 받아서 무슨 요일인지 출력하는 프로그램을 작성해보자.

문제

지금까지 배운 문법으로 코드를 짜보자.요일을 구하는 공식은 hint에서 알려주고 있다.

  • 여기서 요일은 (일수 % 7)이므로 = 0(일요일), 1(월), 2(화), 3(수), 4(목), 5(금) 6,(토)가 된다.
  • 변수 이름은 _대신 이어지는 단어를 첫문자 대문자로 하여 정하는게 좋다. 그러니 total_days대신 totalDays라는 변수를 사용하여 코드를 작성하자.
  • 주의해야 할 점은 4년마다 2월에 29일 하루가 추가되는 윤년이 있다는 점이다.

😊 처음 프로그램을 작성해보니 어렵겠지만, 당연하다! 하루 종일 시간을 들여서 작성해도 된다.

😉 반복되는 코드, 더러워 보이는 코드라도 괜찮다! 일단 짜보자!




2. 해답

먼저 이 문제를 푸는 방식은 아주 다양하다는 것을 기억하자.
어떠한 코드라도 로직이 맞다면 요일을 구할 수 있다. 이 코드는 그 중 하나일 뿐이다.

package ex06;

public class weekday {

	public static void main(String[] args) {
		int year = 2022;
		int month = 12;
		int day = 28;
		
		int totalDays; // 1900.1.1~내가 원하는 날짜가지의 총 일수
		
		totalDays = (year - 1900) * 365;  //2021년까지의 일수(윤달미포함)
		totalDays = totalDays + (year-1900)/4; 
        //2021년까지의 일수
  1. 먼저 입력해줄 년, 월, 일의 변수 선언을 하자. (2022년 12월 28일)
  2. 그 다음 우리가 계산할 totalDays 또한 선언한다.
  3. 먼저 2021년까지의 일수를 구하자. 1900년부터 달력이 만들어 졌으므로 year에 1900을 빼야 한다. totalDays = (year - 1900) * 365;
  4. 3번의 값에 윤년이 있었던 만큼 일수를 더해주자. totalDays = totalDays + (year-1900)/4;

		int totalDays;
		
		totalDays = (year - 1900) * 365;  //2021년까지의 일수(윤달미포함)
		totalDays = totalDays + (year-1900)/4; //2021년까지의 일수
		
		if((year-1900)%4==0 && (month <3)) { // 윤년에 해당하고 1월이나 2월이라면
			totalDays = totalDays - 1; 
		}
  1. 만약 2022년이 윤년인데 입력된 month가 1,2월이라면 29일인 윤년이 더해지지 않았을 것이므로 1을 뺀다.

// 매월 마지막 날 : 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
		
		if(month==1) {
			totalDays = totalDays + day;
		}
		
		if(month==2) {
			totalDays = totalDays + day+ 31; // 2월이므로 1월달 일자(31일)과 day를 더해준다.
		}
		
		if(month==3) {
			totalDays = totalDays + day + 31+28;
		}
		
		if(month==4) {
			totalDays = totalDays + day + 31 + 28 + 31;
		}
		
		if(month==5) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30;
		}
		
		if(month==6) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31;
		}
		
		if(month==7) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30;
		} 
		
		if(month==8) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31;
		}
		
		if(month==9) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
		}
		
		if(month==10) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
		}
		
		if(month==11) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
		}
		
		if(month==12) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
		}
        
        int dow = totalDays%7;
  1. 그리고 주어진 월과 일까지의 수를 더하자.
  2. if문으로 구해진 totalDays를 7로 나누면 숫자로 된 요일이 나온다. (dow=day of week)



3. 전체 코드 보기

package ex06;

public class weekday {

	public static void main(String[] args) {
		int year = 2022;
		int month = 12;
		int day = 28;
		
		//(1) 1900.1.1~내가 원하는 날짜가지의 총 일수
		// 1년 365, 윤달이 있는 1년은 366일
		
		//(2) 일수 % 7 = 0(일요일), 1(월), 2(화), 3(수), 4(목), 5(금) 6,(토)
		
		int totalDays;
		
		totalDays = (year - 1900) * 365;  //2021년까지의 일수(윤달미포함)
		totalDays = totalDays + (year-1900)/4; //2021년까지의 일수
		
		if((year-1900)%4==0&&(month <3)) {
			totalDays = totalDays - 1;
		}
        //윤년인데 입력된 month가 1,2월이라면 29일인 윤년이 더해지지 않았을 것이므로 1을 뺀다.
		
		// 매월 마지막 날 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
		
		if(month==1) {
			totalDays = totalDays + day;
		}
		
		if(month==2) {
			totalDays = totalDays + day+ 31;
		}
		
		if(month==3) {
			totalDays = totalDays + day + 31+28;
		}
		
		if(month==4) {
			totalDays = totalDays + day + 31 + 28 + 31;
		}
		
		if(month==5) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30;
		}
		
		if(month==6) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31;
		}
		
		if(month==7) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30;
		} 
		
		if(month==8) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31;
		}
		
		if(month==9) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
		}
		
		if(month==10) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
		}
		
		if(month==11) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
		}
		
		if(month==12) {
			totalDays = totalDays + day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
		}
		
		int dow = totalDays%7;
		
		if(dow==0) {
			System.out.println(year+"년"+month+"월"+day+"일요일입니다");
		}
		if(dow==1) {
			System.out.println(year+"년"+month+"월"+day+"월요일입니다");
		}
		if(dow==2) {
			System.out.println(year+"년"+month+"월"+day+"화요일입니다");
		}
		if(dow==3) {
			System.out.println(year+"년"+month+"월"+day+"수요일입니다");
		}
		if(dow==4) {
			System.out.println(year+"년"+month+"월"+day+"목요일입니다");
		}
		if(dow==5) {
			System.out.println(year+"년"+month+"월"+day+"금요일입니다");
		}
		if(dow==6) {
			System.out.println(year+"년"+month+"월"+day+"토요일입니다");
		}
	}

}

결과값 : 2022년12월28수요일입니다

year, month, day의 값을 바꾸어 다른 날도 올바른 요일이 나오는지 확인하자. (꼭 해 봐야 오류가 있는지 없는지 알 수 있다!)

profile
코딩을 배우고 기록합니다. 읽는 사람이 이해하기 쉽게 쓰려고 합니다.

0개의 댓글