본문 바로가기
항해

[Day34]JAVA 프로그래머스 개인정보 수집 유효기간

by neVerThe1ess 2024. 12. 1.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


🌗문제 자세히보기

  • 유효기간이 넘은 파기해야 할 개인정보를 찾는다.
  • 한달은 28일이다.

 

1. 오늘 날씨의 년 , 달 , 월 을 "." 으로 분리해서 각각 저장한다.  ( "." 은 그냥 사용하면 분리가 안된다 "\\." 사용해야한다!)

String[] date = today.split("\\.");
int y_now = Integer.parseInt(date[0]);
int m_now = Integer.parseInt(date[1]);
int d_now = Integer.parseInt(date[2]);

2. 각 약관종류의 유효기간이 저장되어 있는  terms 를 공백으로 분리해서 HashMap  에  약관타입 , 유효기간 으로 저장한다.

for(int i=0;i<terms.length;i++)
{
    String term = terms[i];
    String[] t= term.split(" ");
    map.put(t[0], Integer.parseInt(t[1]));
}

 

3. 각 수집된 개인정보마다 유효기간이 넘었는지 확인한다.

  • privacies 배열의 문장으로 공백으롭 분리해서 어떤 타입에 언제 수집된 개인정보인지 분리한다.
  • 수집된 개인정보도 "." 으로 분리해서 년, 달,일로 분리한다.
  • map 에서 개인정보의 타입을 찾아 유효기간이 몇개월인지 확인한다.
  • 수집된 개인정보에 유효기간을 더하여 최종 보관기간을 구한다.
  • 최종 보관기간을 구할때 한달 일수는 28일이고 한달은 12월까지 있는걸 주의하며 12월이 넘어가면 다음해로 넘기고 0일이 되면 28일로 다시 셋팅한다.
  • 최종보관기간과 오늘을 비교해서 오늘보다  과거 일자면 파기한다. 
//각 기간마다 각 유효기간 넘었는지 안넘었는지 확인
    for(int i = 0;i<privacies.length;i++)
    {
        String privacy = privacies[i];
        String[] p = privacy.split(" ");
        String regDay = p[0];
        String type = p[1];      

        int expiry = map.get(type); //유효기간 (n달)


        String day[] = regDay.split("\\.");

        int y_day = Integer.parseInt(day[0]);
        int m_day = Integer.parseInt(day[1]);
        int d_day = Integer.parseInt(day[2]);            

        //유효기간 만기일 구하기
        m_day += expiry;          

        if(m_day >12)
        {
            y_day += m_day/12;
            m_day = m_day % 12;
        }

        if(m_day == 0)
        {
            y_day -=1;
            m_day = 12;                
        }

        d_day -=1;

        //한달은 마지막은 28일까지
        if(d_day == 0)
        {
            d_day = 28;
            m_day -= 1;
        }

        //만료일자와 오늘날짜비교
        if(y_day == y_now)
        {
            if(m_day == m_now)
            {
                if(d_day < d_now)
                {
                    result.add((i+1)); 
                }
            }
            else if(m_day < m_now)
            {
                result.add((i+1)); 
            }
        }
        else if(y_day < y_now)
        {
            result.add((i+1));    
        }

    }

 


🌕최종코드 

public static int[] solution(String today, String[] terms, String[] privacies) {
        int[] answer = {};

        String[] date = today.split("\\.");
        int y_now = Integer.parseInt(date[0]);
        int m_now = Integer.parseInt(date[1]);
        int d_now = Integer.parseInt(date[2]);

        HashMap<String,Integer> map = new HashMap<>();
        ArrayList<Integer> result = new ArrayList<>();
        
        //각 타입별 유효기간 저장
        for(int i=0;i<terms.length;i++)
        {
            String term = terms[i];
            String[] t= term.split(" ");
            map.put(t[0], Integer.parseInt(t[1]));
        }


        //각 기간마다 각 유효기간 넘었는지 안넘었는지 확인
        for(int i = 0;i<privacies.length;i++)
        {
            String privacy = privacies[i];
            String[] p = privacy.split(" ");
            String regDay = p[0];
            String type = p[1];      

            int expiry = map.get(type); //유효기간 (n달)


            String day[] = regDay.split("\\.");

            int y_day = Integer.parseInt(day[0]);
            int m_day = Integer.parseInt(day[1]);
            int d_day = Integer.parseInt(day[2]);            

            //유효기간 만기일 구하기
            m_day += expiry;          

            if(m_day >12)
            {
                y_day += m_day/12;
                m_day = m_day % 12;
            }

            if(m_day == 0)
            {
                y_day -=1;
                m_day = 12;                
            }

            d_day -=1;

            //한달은 마지막은 28일까지
            if(d_day == 0)
            {
                d_day = 28;
                m_day -= 1;
            }
            
            //만료일자와 오늘날짜비교
            if(y_day == y_now)
            {
                if(m_day == m_now)
                {
                    if(d_day < d_now)
                    {
                        result.add((i+1)); 
                    }
                }
                else if(m_day < m_now)
                {
                    result.add((i+1)); 
                }
            }
            else if(y_day < y_now)
            {
                result.add((i+1));    
            }
            
        }       
        
        answer = new int[result.size()];
       
        for(int i=0;i<answer.length; i++)
        {
            answer[i] = result.get(i);
        }

        Arrays.sort(answer); //오름차순
        return answer;
    }