berry

[Programmers] 개인정보수집유효기간(Lv.1) - Java 본문

Problem Solving/Programmers

[Programmers] 개인정보수집유효기간(Lv.1) - Java

berryiscute 2023. 3. 8. 17:38
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[문제풀이]

문제에서 주어진 조건대로 유효기간이 몇 개월인지를 HashMap에 저장해서 필요할 때 바로 꺼내 쓰게끔 했다.

 

근데 예시에서는 12개월까지만 나와있는데 1<=유효기간<=100이므로 예외처리를 해줘야함.

 

그래서 %연산과 /연산으로 mok, nameogee 변수를 둬서 

 

mok = 유효기간 / 12

nameogee = 유효기간 % 12

 

로 계산되게끔 했다.

 

그래서 [A 33] 이란 조건일때는

 

mok = 2, nameogee = 9가 되어서 2년 9개월이 되고

 

약관날짜에 적절히 더해주기만 하면 된다.

 

대신 1달은 28일까지란 조건이 걸려있기 때문에

 

일 > 28이면 월++

 

월 > 12이면 년++

 

일 == 0이면 월--하고 일을 28로 해줘야함!!

 

 

 

 

 

[소스코드]

import java.util.*;

class Solution {
     static Map<String, Integer> validate = new HashMap<>();
    public static List<Integer> solution(String today, String[] terms, String[] privacies){
        List<Integer> answer = new ArrayList<>();

        for(String term : terms){
            String key = term.split(" ")[0];
            Integer value = Integer.parseInt(term.split(" ")[1]);
            validate.put(key, value);
        }

        for(int i=0;i<privacies.length;i++){
            String dateStr = privacies[i].split(" ")[0];
            String term = privacies[i].split(" ")[1];
            int param = validate.get(term);
            
            if(!isValide(today, dateStr, param)){
                answer.add(i+1);
            }
        }

        return answer;
    }
    
	//today : 오늘 날짜
    //dateStr : 약관을 적용한 날짜
    //param : A 5, B 7과 같이 약관에 따라 추가로 더해줘야 되는 월
    public static boolean isValide(String today, String dateStr, int param){
        
        String[] tmp = dateStr.split("\\.");
        int tmpyear = Integer.parseInt(tmp[0]);
        int tmpmonth = Integer.parseInt(tmp[1]);
        int tmpday = Integer.parseInt(tmp[2]);

        int mok = param / 12;
        int nameogee = param % 12;

        int year = tmpyear + mok;
        int month = tmpmonth + nameogee;
        int day = tmpday-1;

        if(day > 28){
            day -= 28;
            ++month;
        }
        if(day == 0){
            day = 28;
            --month;
        }
        if(month > 12){
            month-=12;
            ++year;
        }

        String y = year+"";
        String m = month > 9 ? month+"" : "0"+month;
        String d = day > 9 ? day+"" : "0"+day;

        dateStr = y+m+d;
        
        today = today.replaceAll("\\.","");

        return dateStr.compareTo(today) >= 0 ;

    }
}
반응형