본문 바로가기
Java/Programmers

[Lv.1]개인정보 수집 유효기간

by GLOWWW 2023. 2. 2.

첫번째로 푼 방법은 주어진 날짜의 문자열을 쪼개서 계산 후 다시 날짜로 반환하는 방법이었다.

이 과정에서 year와 month를 계산하는 과정에서 누락된 부분이 있어서 지속적으로 테스트케이스 2개정도가 틀렸었다.

다른 쉬운 방법이 없을까 고민하던 중, 날짜를 모두 일수로 계산하여 비교하면 복잡하게 날짜계산을 할 필요가 없다는게 떠올랐다.

아래의 첫번째 코드블럭은 날짜를 모두 일수로 계산하여 풀이한 방식이며, 그 아래는 오답이었지만 올려본다.

package Lv_1;

import java.util.Arrays;

public class 개인정보수집유효기간 {
    public static int[] solution(String today, String[] terms, String[] privacies) {
        int[] tmp_result = new int[privacies.length];
        int today_year = Integer.parseInt(today.split("\\.")[0]);
        int today_month = Integer.parseInt(today.split("\\.")[1]);
        int today_day = Integer.parseInt(today.split("\\.")[2]);
        int today_total = (today_year * 12 * 28) + (today_month * 28) + today_day;

        for (String term : terms) {
            String term_type = term.split(" ")[0];
            int term_month = Integer.parseInt(term.split(" ")[1]);
            for (int i = 0; i < privacies.length; i++) {
                String privacy_date = privacies[i].split(" ")[0];
                int privacy_year = Integer.parseInt(privacy_date.split("\\.")[0]);
                int privacy_month = Integer.parseInt(privacy_date.split("\\.")[1]);
                int privacy_day = Integer.parseInt(privacy_date.split("\\.")[2]);
                int privacy_total = (privacy_year * 12 * 28) + (privacy_month * 28) + privacy_day - 1;
                if (privacies[i].contains(term_type)) {
                    tmp_result[i] = privacy_total + (term_month * 28);
                }
            }
        }

        int expired_cnt = 0;

        for (int result : tmp_result) {
            if (today_total > result) {
                expired_cnt++;
            }
        }

        int[] answer = new int[expired_cnt];

        int idx = 0;
        int idx2 = 1;
        for (int result : tmp_result) {
            if (today_total > result) {
                answer[idx] = idx2;
                idx++;
            }
            idx2++;
        }
        return answer;
    }

    public static void main(String[] args) {
//        String today = "2022.05.19";
//        String[] terms = {"A 6", "B 12", "C 3"};
//        String[] privacies = {"2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"};
//        String today = "2022.02.28";
//        String[] terms = {"A 23"};
//        String[] privacies = {"2020.01.28 A"};
        String today = "2019.01.01";
        String[] terms = {"B 12"};
        String[] privacies = {"2017.12.21 B"};
        int[] result = solution(today, terms, privacies);
        System.out.println(Arrays.toString(result));
    }
}

이상이 통과한 코드, 아래는 통과하지못했지만 내가 시도했던 방법이다.

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        int expired_cnt = 0;
        int today_int = Integer.parseInt(today.replace(".", ""));
        String[] expected_expired_date = privacies.clone();
        for (int i = 0; i < privacies.length; i++) {
            String privacy_date = privacies[i].split(" ")[0];
            int privacy_year = Integer.parseInt(privacy_date.split("\\.")[0]);
            int privacy_month = Integer.parseInt(privacy_date.split("\\.")[1]);
            int privacy_day = Integer.parseInt(privacy_date.split("\\.")[2]);
            for (String term : terms) {
                String term_type = term.split(" ")[0];
                int term_date = Integer.parseInt(term.split(" ")[1]);
                if (privacies[i].contains(term_type)) {
                    privacy_month += term_date;
                    if (privacy_month > 12) {
                        privacy_year += privacy_month / 12;
                        privacy_month = privacy_month % 12;
                    }
                    if (privacy_day == 1) {
                        privacy_day = 28;
                        privacy_month--;
                    } else {
                        privacy_day--;
                    }
                }
            }
            String e_privacy_year = Integer.toString(privacy_year);
            String e_privacy_month = Integer.toString(privacy_month);
            if (e_privacy_month.length() == 1) {
                e_privacy_month = "0" + e_privacy_month;
            }
            String e_privacy_day = Integer.toString(privacy_day);
            if (e_privacy_day.length() == 1) {
                e_privacy_day = "0" + e_privacy_day;
            }
            expected_expired_date[i] = e_privacy_year + e_privacy_month + e_privacy_day;
        }
        for (int i = 0; i < expected_expired_date.length; i++) {
            if (today_int > Integer.parseInt(expected_expired_date[i])) {
                expired_cnt++;
            }
        }
        int[] answer = new int[expired_cnt];
        int idx = 0;
        int idx2 = 1;
        for (String eed : expected_expired_date) {
            if (today_int > Integer.parseInt(eed)) {
                answer[idx] = idx2;
                idx++;
            }
            idx2++;
        }
        return answer;
    }
}

이로써 프로그래머스 Lv.1 단계의 문제도 모두 풀었다..!

'Java > Programmers' 카테고리의 다른 글

[Lv.2]멀리 뛰기  (0) 2023.02.06
[Lv.2] N개의 최소공배수  (0) 2023.02.05
[Lv.1]햄버거 만들기  (0) 2023.02.01
[Lv.1]성격 유형 검사하기  (0) 2023.02.01
[Lv.1]문자열 나누기  (0) 2023.01.31

댓글