[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 8월 22일 월요일

[JAVA] Baekjoon 2007년 x월 y일이 무슨 요일인지 알아내보기..

for 코딩 테스트도 이제 막바지에 이르고 있다.. 고민하는걸 싫어하는편이긴 하지만 그래도 어쩌겠는가.. 개발자로 살고자한다면.. 그에 합당한 노력을 해야지.. 머 그렇다고 엄청나게 하는것도 아니긴 하지만.. ㅎㅎㅎ..

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package Code_201608;

import java.util.Scanner;

public class PrintFor2007 {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
        String[] monthVal = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        
        //int monVal = 1;
        //int dayVal = 1;
        
        int monVal = scan.nextInt();
        int dayVal = scan.nextInt();
  
        //월은 눈에보이는 월이 아닌 그 이전까지 계산 후 + 일을 한다
        for(int i = 1; i < monVal; i++) {
            if(i == 4 || i == 6 || i == 9 || i == 11) {
                dayVal = dayVal + 30;
          
            } else if(2 == i) {
                dayVal = dayVal + 28;
          
            } else {
                dayVal = dayVal + 31;
            }
        }
        //System.out.println(dayVal % 7);
        System.out.println(monthVal[dayVal % 7]);
    }

}//




문제를 보면 거창해 보이지만, 실제 코딩된 소스는 그렇게 길지는 않다.. 코딩 테스트 문제가 너무 길어도 문제긴 하겠지만 말이지.. ㅎㅎㅎ..

해당 문제에서 가장 핵심은 달[Month]에 대한 개념을 어떻게 잡느냐이다.. 19라인 주석에도 설명을 하긴 했지만 난 처음에 눈에 보이는 그대로 1월부터 3월 혹은 1월부터 6월 해서 3번, 6번을 for 가 돌아야된다고 생각을 했다..

그런데 그렇게하면 절대 답이 안나오지.. 우리가 5월 1일에 해당하는 요일을 구한다고 치면, 5번의 for 가 아닌 4번의 for 가 돌아야된다.. 왜냐면 1월부터 4월까지 총 4번 그리고서 그 이후에 1일을 더하는 개념이 되는 것이기 때문이다.. 아흐 난 첨에 이걸 그렇게 생각을 못해서 계속 삽질을 하면서 왜 답이 안나오지..?? 이 생각만 했다.. ㅋㅋ

난 처음에 for(int i = 1; i < 6; i++) 이런식으로 되야 한다고 생각을 했다.. 5번이 for 가 수행하도록 하지만 그것이 아닌 for(int i = 1; i < 5; i++) 가 되고 4번 수행하도록 코딩을 해야된다.. 그래야지만 위에 잠시 언급한 개념과 맞는 코딩이 되는 것이다..

그 이후에는 머 좀 심플하다.. 각각의 월에 대한 날짜 기준이 있으니 그것대로 if 문을 구성해주면 되겠다.. 출력은 최종적으로 나온 값을 나눈 후에 그 값에 대한 것을 배열로 따져서 요일을 보여주면 된다.. 즉, monthVal[dayVal % 7]

댓글 없음:

댓글 쓰기