๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค) ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„ ๋ฌธ์ œํ’€์ด

by sh119 2025. 2. 20.

๋ฌธ์ œ)

https://school.programmers.co.kr/learn/courses/30/lessons/150370

ํ’€์ด)

import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        List<Integer> arr = new ArrayList<>();
        Map<Character, Integer> expiryDate = new HashMap<>();
        
        // ์•ฝ๊ด€ ์ •๋ณด ํŒŒ์‹ฑ
        for (String s : terms) {
            String[] split = s.split(" ");
            char termType = split[0].charAt(0);
            int month = Integer.parseInt(split[1]);
            expiryDate.put(termType, month);
        }

        // ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์ด ์ผ์ˆ˜๋กœ ๋ณ€ํ™˜ (๋…„ * 12 * 28 + ์›” * 28 + ์ผ)
        int todayDays = convertToDays(today);

        for (int i = 0; i < privacies.length; i++) {
            String s = privacies[i];

            // ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ๋‚ ์งœ์™€ ์•ฝ๊ด€ ์œ ํ˜• ์ถ”์ถœ
            String date = s.substring(0, 10);
            char termType = s.charAt(11);

            // ๋งŒ๋ฃŒ ๊ฐœ์›” ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
            int expiryMonths = expiryDate.get(termType);

            // ์ˆ˜์ง‘ ๋‚ ์งœ๋ฅผ ์ด ์ผ์ˆ˜๋กœ ๋ณ€ํ™˜ ํ›„, ๋งŒ๋ฃŒ ๊ฐœ์›” ์ˆ˜๋ฅผ 28์ผ ๋‹จ์œ„๋กœ ์ถ”๊ฐ€
            int expiryDateDays = convertToDays(date) + expiryMonths * 28;

            // ์˜ค๋Š˜ ๋‚ ์งœ์™€ ๋น„๊ตํ•˜์—ฌ ๋งŒ๋ฃŒ ์—ฌ๋ถ€ ํ™•์ธ
            if (todayDays >= expiryDateDays) {
                arr.add(i + 1);
            }
        }

        return arr.stream().mapToInt(Integer::intValue).toArray();
    }

    // ๋‚ ์งœ๋ฅผ ์ด ์ผ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
    private int convertToDays(String date) {
        int yyyy = Integer.parseInt(date.substring(0, 4));
        int mm = Integer.parseInt(date.substring(5, 7));
        int dd = Integer.parseInt(date.substring(8, 10));
        return yyyy * 12 * 28 + mm * 28 + dd;
    }
}