[BoJ] 1924 with JAVA

msriver·2020년 6월 2일
0

알고리즘/자료구조

목록 보기
9/20

문제
오늘은 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중 하나를 출력한다.

내가 생각한 방법

  • x월 y일을 입력받아 1월1일과 총 몇일이 차이나는지 계산을 먼저 한다.
  • 계산방법은 x-1월까지 그 달의 총 일수를 더하고 y를 더한다.
  • 예를 들어 3월 21일과 1월 1일의 차이를 계산하기 위해서는 1월,2월의 총 일수를 더한다. 그 뒤 21을 더하면 그 결과가 곧 1월 1일과의 차이이다.
  • 차이를 구하고 나면 그 값을 7로 나눈다. 7로 나누면 나머지가 0~6이 생길텐데
    순서대로 일요일,월요일,....,토요일까지 매칭이 된다. (문제에서 2007년 1월 1일은 일요일이므로)

위 생각을 가지고 의식의 흐름대로 구현을 해보았다.

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner ss = new Scanner(System.in);
        int x = ss.nextInt();
        int y = ss.nextInt();
        int diff = 0;
        while(x!=0){
            if(x==1){
                break;
            } else {
                x -= 1;
            }
            if(x==1||x==3||x==5||x==7||x==8||x==10){
                diff += 31;
            } else if(x==4||x==6||x==9||x==11){
                diff += 30;
            } else {
                diff += 28;
            }
        }
        diff = diff + y;
        
        switch(diff%7) {
            	case 0: System.out.println("SUN"); break;
        	case 1: System.out.println("MON"); break;
                case 2: System.out.println("TUE"); break;
                case 3: System.out.println("WED"); break;
                case 4: System.out.println("THU"); break;
                case 5: System.out.println("FRI"); break;
                case 6: System.out.println("SAT"); break;
                
        }
        
    }
}

맞았다는 결과를 받았지만 코드가 깔끔하지 않다.
아래는 맞은 사람 중 한 사람의 코드를 가져와밨다. 생각 자체는 비슷하나 구현이 훨씬 깔끔하다.

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

public class Main {
	public static void main(String[] args) throws Exception{
		//2007년 1월 1일 월요일 /기준
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer str = new StringTokenizer(br.readLine(), " ");
		int[] monthArray = {31,28,31,30,31,30,31,31,30,31,30,31};
		String[] dateArray = {"SUN","MON", "TUE", "WED", "THU" ,"FRI","SAT"};
		int month = Integer.parseInt(str.nextToken());
		int day = Integer.parseInt(str.nextToken());
		
		int numOfDays = 0; //나의 코드에서 diff변수와 같은 역할
		
		for(int i =0;i<month-1;i++) {
			numOfDays += monthArray[i];
		}		
		numOfDays +=day;
		
		System.out.println(dateArray[numOfDays%7]);
	}
}

역시 갈길은 멀고 험난하다. 화이팅!

profile
NOBODY

0개의 댓글