반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Lv.2
- dynamic programming
- Permutation
- Java
- 아기상어
- recursive
- programmers
- PS
- 백준
- backtracking
- 문자열
- BFS
- dfs
- baekjoon
- algorithm
- Lv.1
- ProblemSolving
- SW역량테스트
- BOJ
Archives
- Today
- Total
berry
[Programmers] 개인정보수집유효기간(Lv.1) - Java 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/150370
[문제풀이]
문제에서 주어진 조건대로 유효기간이 몇 개월인지를 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 ;
}
}
반응형
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers] 숫자 변환하기(Lv.2) - Java (0) | 2023.04.27 |
---|---|
[Programmers] 단체사진 찍기(Lv.2) - Java (0) | 2023.04.20 |
[Programmers] 바탕화면 정리(Lv.1) - Java (0) | 2023.03.04 |
[Programmers] 무인도 여행(Lv.2) - Java (0) | 2023.03.02 |
[Programmers] 카드 뭉치(Lv.1) - Java (0) | 2023.03.01 |