Q 2948 2009๋…„

๐Ÿ’ก ๋ฌธ์ œ ์š”์•ฝ ๋ฐ ๋ถ„์„

2009๋…„ ๋‚ ์งœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฌด์Šจ ์š”์ผ์ธ์ง€ ์ถœ๋ ฅํ•˜์ž. ์ฐธ๊ณ ๋กœ, 2009๋…„ 1์›” 1์ผ์€ ๋ชฉ์š”์ผ์ด๋ฉฐ, ์œค๋‹ฌ์€ ์—†๋‹ค.

๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. ๋ฐฐ์—ด์„ ๋‘ ๊ฐœ ์„ ์–ธํ•œ๋‹ค. int[] months = {0, 31, 28, 31, 30, ..., 31}; String[] weeks = {"Thursday", "Friday", ..., "Wednesday"};

  2. M๊นŒ์ง€ months ๋ฐฐ์—ด์˜ ์ผ์ž๋ฅผ ๋”ํ•˜๊ณ , D ๋ฅผ ๋”ํ•œ๋‹ค. for(int i = 0; i < M; i++) { ์—ฐ์‚ฐ }

  3. ๋”ํ•œ ๊ฐ’์„ 7๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ๋‚˜๋จธ์ง€๊ฐ€ n ์ด๋ผ๋ฉด, weeks ๋ฐฐ์—ด์—์„œ n-1๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ’ก ์ฝ”๋“œ


public class Main {

    public static void main(String[] args) throws Exception {
        int[] months = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] weeks = {"Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"};

        int D = read();
        int M = read();

        int count = 0;
        for (int i = 0; i < M; i++) {
            count += months[i];
        }
        count += D;
        int n = count % 7 - 1;

        // ArrayIndexOutOFBounds ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
        if (n == -1) {
            System.out.println("Wednesday");
            return;
        }
        
        System.out.println(weeks[n]);
    }

    static int read() throws Exception {
        int c = 0, n = 0;
        while ((c = System.in.read()) > 47) n = (n << 3) + (n << 1) + (c & 15);
        return n;
    }

}

๐Ÿ’ก ํ‹€๋ฆฐ ๋ถ€๋ถ„ ๋ถ„์„

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์ด๋ผ๋ฉด โ€œ์ˆ˜์š”์ผโ€์˜ ๊ฒฝ์šฐ, n = -1 ์ด ๋˜์–ด ๋ฒ„๋ ค์„œ weeks[n] ์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์‚ด์ง ์ˆ˜์ •ํ–ˆ๋‹ค. ๋‹ค๋งŒ, ๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ์ธ๋ฐ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ์ข€๋” ๋‹จ์ˆœํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด ๋ณด์•˜๋‹ค.


public class Main {

    public static void main(String[] args) throws Exception {
        int[] months = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] weeks = {"Wednesday","Thursday","Friday","Saturday","Sunday","Monday","Tuesday"};

        int D = read();
        int M = read();

        for (int i = 0; i < M; i++) {
            D += months[i];
        }

        System.out.println(weeks[D%7]);
    }

    static int read() throws Exception {
        int c = 0, n = 0;
        while ((c = System.in.read()) > 47) n = (n << 3) + (n << 1) + (c & 15);
        return n;
    }

}
  • count ๋ณ€์ˆ˜๋ฅผ ๊ตณ์ด ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค. ์ž…๋ ฅ ๋ฐ›์€ ๋‚ ์งœ D์— ์ด์ „ ๋‹ฌ์˜ ๋‚ ์งœ๋“ค์„ ๋”ํ•˜๋ฉด ๋จ.

  • D % 7 - 1 ๋กœ -1 ์—ฐ์‚ฐ์„ ํ•  ํ•„์š” ์—†์ด, weeks ๋ฐฐ์—ด ์ž์ฒด์—์„œ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•˜๋ฉด ๋œ๋‹ค. 1์›” 1์ผ์ด ๋ชฉ์š”์ผ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ์š”์†Œ๋ฅผ โ€œThursdayโ€ ๋กœ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ, ์ž์ฒด์ ์œผ๋กœ -1 ํ•˜์—ฌ โ€œWednesdayโ€ ๋ฅผ ์ฒซ ์š”์†Œ๋กœ ๋งŒ๋“ค๋ฉด ๋ณต์žกํ•œ ์—ฐ์‚ฐ์ด ํ•„์š” ์—†๋‹ค.

๐Ÿ’ก ์‹œ๊ฐ„ ๋ณต์žก๋„, ๊ณต๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„ ๋ณต์žก๋„๊ณต๊ฐ„ ๋ณต์žก๋„
O(1)O(1)