코테/코드트리

[코드트리/NOVICE MID] 그 계절, 그 날 (JAVA)

imname1am 2023. 9. 11. 13:22
반응형

🔺 문제

https://www.codetree.ai/missions/5/problems/that-season-that-day?&utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

🔺 코드

맨 처음 먼저 작성한 코드가 너무 중복되는 부분이 많고 길어져서 2차 코드처럼 줄여보았다,,,,,

 

 

- 1차 정답 코드)

1차 코드 확인하기
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 
        int[] days = {0312831303130313130313031};
 
        int Y = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int D = Integer.parseInt(st.nextToken());
 
        // 윤년 확인
        boolean isLeapYear = false;
        if ((Y % 4 == 0 && Y % 100 != 0|| (Y % 400 == 0)) {
            isLeapYear = true;
            days[2= 29;
        }
 
        if(3 <= M && M <= 5) {
            if(inRange(D, days[M])) {
                System.out.println("Spring");
                return;
            }
            else {
                System.out.println(-1);
                return;
            }
        }
        else if(6 <= M && M <= 8) {
            if(inRange(D, days[M])) {
                System.out.println("Summer");
                return;
            }
            else {
                System.out.println(-1);
                return;
            }
        }
        else if(9 <= M && M <= 11) {
            if(inRange(D, days[M])) {
                System.out.println("Fall");
                return;
            }
            else {
                System.out.println(-1);
                return;
            }
        }
        else {
            if(M == 2) {
                if(inRange(D, days[2])) {
                    System.out.println("Winter");
                    return;
                }
                else {
                    System.out.println(-1);
                    return;
                }
            }
            else {
                if(inRange(D, days[M])) {
                    System.out.println("Winter");
                    return;
                }
                else {
                    System.out.println(-1);
                    return;
                }
            }
        }
    }
 
    private static boolean inRange(int num, int max) {
        if(num <= max) return true;
        return false;
    }
}
 
cs

 

 

- 2차 정답 코드)

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
36
37
38
39
40
41
42
43
44
45
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 
        int[] days = {0312831303130313130313031};
 
        int Y = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int D = Integer.parseInt(st.nextToken());
 
        // 윤년 확인
        boolean isLeapYear = false;
        if ((Y % 4 == 0 && Y % 100 != 0|| (Y % 400 == 0)) {
            isLeapYear = true;
            days[2= 29;
        }
 
 
        String answer = "";
 
        if(3 <= M && M <= 5) {
            answer = inRange(D, days[M]) ? "Spring" : "-1";
        }
        else if(6 <= M && M <= 8) {
            answer = inRange(D, days[M]) ? "Summer" : "-1";
        }
        else if(9 <= M && M <= 11) {
            answer = inRange(D, days[M]) ? "Fall" : "-1";
        }
        else {
            answer = inRange(D, days[M]) ? "Winter" : "-1";
        }
 
        System.out.println(answer);
    }
 
    private static boolean inRange(int num, int max) {
        if(num <= max) return true;
        return false;
    }
}
cs

✅ 해결 아이디어
✔ 윤년 판별 코드
- 4의 배수가 아니면, 윤년이 아님 (if y % 4 != 0 return false;)
- 4의 배수 중 100의 배수가 아니라면, 윤년 (if y % 100 != 0 return true;)
- 100의 배수 중 400의 배수라면, 윤년 (if y % 400 != 0 return true;)
- 100의 배수지만, 400의 배수가 아니면 윤년 (return false;)

 


💬 느낀 점

으앗 윤년.....

오랜만에 보다...ㅎㅎ

 

1회독 2회독 3회독 4회독 5회독
V        
반응형