알고리즘/Lv1. 프로그래머스

개인정보 수집 유효기간

signal시노 2023. 7. 13. 17:48

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

 

프로그래머스

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

programmers.co.kr

import java.util.*;
class Solution {
    public List solution(String today, String[] terms, String[] privacies) {
        List<Integer> answer=new ArrayList<>();
        String [] todayArr=today.split("\\.");
        String year=todayArr[0];
        String month=todayArr[1];
        String day=todayArr[2];
        
        if(month.charAt(0)=='0')month=month.substring(1);
        if(day.charAt(0)=='0')day=day.substring(1);
        
        int yearN=Integer.parseInt(year);
        int monthN=Integer.parseInt(month);
        int dayN=Integer.parseInt(day);
        
        for(int i=0;i<privacies.length;i++){
            String abc=String.valueOf(privacies[i].charAt(privacies[i].length()-1));
            String [] priArr=privacies[i].split("\\.");
            String priYear=priArr[0];
            String priMonth=priArr[1];
            String priDay=priArr[2];
            priDay=priDay.substring(0,2);
            
            if(priMonth.charAt(0)=='0')priMonth=priMonth.substring(1);
            if(priDay.charAt(0)=='0')priDay=priDay.substring(1);
            
            int priYearN=Integer.parseInt(priYear);
            int priMonthN=Integer.parseInt(priMonth);
            int priDayN=Integer.parseInt(priDay);
            for(int j=0;j<terms.length;j++){
                if(abc.equals(String.valueOf(terms[j].charAt(0)))){
                    int termsN=Integer.parseInt(terms[j].replaceAll("[^0-9]",""));
                    priMonthN+=termsN;
                    while(priMonthN>12){
                        priYearN++;
                        priMonthN-=12;
                    }
                    break;
                }
            }
            int termsY=yearN-priYearN;
            int termsM=monthN-priMonthN;
            int termsD=dayN-priDayN;
            
             if(termsD<0){
                termsM--;
                termsD+=28;
            }
            if(termsM<0){
                termsY--;
                termsM+=12;
            }  
            System.out.println("년:"+termsY+" 월:"+termsM+" 일:"+termsD);
            if(termsY>=0)answer.add(i+1);
            else if(termsY==0&&termsM<0)answer.add(i+1);
            else if(termsY==0&&termsM==0&&termsD<0)answer.add(i+1);
                  
            
        }
        return answer;
    }
}

일자에 유효기간 달 수를 더한 뒤 현재 날짜를 빼서 답을 구했습니다.

다 풀고 나니 각 달마다 일수가 28일로 고정되어 있기 때문에 단순하게 년수*12*28+(현재 달-1)*28+현재 일수로 모두 일로 바꾸고 풀면 훨씬 간단했을 거라는 생각이 뒤늦게 났습니다..

'알고리즘 > Lv1. 프로그래머스' 카테고리의 다른 글

체육복  (0) 2023.07.17
공원 산책  (0) 2023.07.13
2016년  (0) 2023.07.11
콜라 문제  (0) 2023.07.11
가장 가까운 같은 글자  (0) 2023.07.11