출처 : 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 |