프로그래머스- 개인 정보 수집 유효기간

JIWOO YUN·2023년 3월 13일
0

문제링크

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

구현방법

유효기간을 HashMap으로 각 타입마다 유효기간에 맞춰서 넣어두고나서

받은 문자열을 통해서 split을 통해서 각 년월일 과 타입을 받아두고 계산을 통해서 구현했습니다.

문제설명에 따라서 쭉 구현하면 되는 구현문제입니다.

구현알고리즘

HashMap, 구현

CODE

package com.ll.level1.p12921.p150370;

import java.util.ArrayList;
import java.util.HashMap;

public class Main {

    public static void main(String[] args) {
        String today ="2021.12.08";
        String[] terms = {"A 18"};
        String privacies[] ={"2020.06.08 A"};

        int answer[] = new Solution().solution(today,terms,privacies);

        for(int number :answer){
            System.out.println(number);
        }
    }
}

//terms 형식 ["A 6", "B 12", "C 3"] -> split 공백을 자르기
//단순 구현문제
//terms를 hashMap으로 <String,Integer>형식으로 종류와 유효기간으로 체크
//privacies의 각 배열 형식 2021.05.02 A -> 공백으로 나눠서 뒤의 부분으로 종류 체크
//체크하고 남은 앞부분으로 만료되는 유효기간 계산
//모든달은 28일까지 있다.
class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        HashMap<String,Integer> term = new HashMap<>();
        for(int idx =0; idx <terms.length;idx++){
            String part[] = terms[idx].split(" ");
            term.put(part[0],Integer.parseInt(part[1]));
        }
        //오늘날짜 체크용
        String YMD[] = today.split("\\.");
        int check_year = Integer.parseInt(YMD[0]);
        int check_month =Integer.parseInt(YMD[1]);
        int check_day = Integer.parseInt(YMD[2]);
        ArrayList<Integer> ans = new ArrayList<>();
        for(int index = 0; index < privacies.length;index++){
            //날짜월일과 타입 나누기
            String parts[] = privacies[index].split(" ");
            //날짜월일을 .기준으로 분리
            //start[0] = >year [1] => month [2] day
            String Start[] = parts[0].split("\\.");
            //유효기간 계산
            int add_month = term.get(parts[1]);
            int  cur_year = Integer.parseInt(Start[0]);
            int cur_month = Integer.parseInt(Start[1]);
            int cur_day = Integer.parseInt(Start[2]);

            cur_month += add_month;
            cur_day -=1;
            //1일에서 만료계산시 전달로 돌아가야함.
            if(cur_day ==0){
                //1월인경우 -> 전년도로 돌아감.
                if(cur_month == 1){
                    cur_year-= 1;
                    cur_month =12;
                    cur_day =28;
                }else{
                    cur_month-=1;
                    cur_day=28;
                }
            }
            //유효기간을 더했을때 12월을 넘어가는경우 1년을 넘김.
            if(cur_month > 12)
            {
                //12의 배수인경우
                if(cur_month %12 == 0){
                    cur_year += (cur_month-1)/12 ;
                    cur_month =12;
                }else {
                    cur_year += cur_month / 12;
                    cur_month %= 12;
                }

            }
            System.out.println("cur year =" + cur_year);
            System.out.println("cur month =" + cur_month);
            System.out.println("cur day =" + cur_day);
            //현재를 기준으로 유효기간이 남아있으면 넘어감.
            if(check_year < cur_year){
                continue;
            }else if(check_year == cur_year){
                if(check_month < cur_month){
                    continue;
                    //달까지 같은경우
                }else if(check_month == cur_month){
                    if(check_day <= cur_day){
                        continue;
                    }else {
                        ans.add(index+1);
                    }
                }else{
                    ans.add(index+1);
                }
            }else {
                ans.add(index+1);
            }


        }
        int[] answer = new int[ans.size()];
        for(int idx = 0; idx <ans.size();idx++){
            answer[idx] = ans.get(idx);
        }
        return answer;
    }
}
profile
Backend Developer 지원 / 도전

0개의 댓글