-
[프로그래머스/JAVA] 개인정보 수집 유효기간 - 2023 KAKAO BLIND RECRUITMENTETC/Algorithm 2023. 6. 9. 10:05
풀이
일일이 파싱
문자열로 받아서 일일이 파싱하는 방법
한 달은 28일로 고정
입력 값을 1년=12달 1달= 28일로 변환해서 비교하는 방법
6월에 18개월 뒤면?
24월로 12로 나머지 연산을 하게 되면 0이 나오게 된다. 주의하자.
코드
제출 코드
import java.util.*; class Solution { static HashMap<String, Integer> term = new HashMap<>(); public int[] solution(String today, String[] terms, String[] privacies) { ArrayList<String> parsedToday = new ArrayList<>(); ArrayList<Integer> answer = new ArrayList<>(); StringTokenizer st = new StringTokenizer(today, "."); for (int i = 0; i < 3; i++){ parsedToday.add(st.nextToken()); } //임시 출력 // for (String s : parsedToday){ // System.out.println(s); // } for(String str : terms){ st = new StringTokenizer(str, " "); term.put(st.nextToken(), Integer.parseInt(st.nextToken())); } for(int i = 0; i < privacies.length; i++){ st = new StringTokenizer(privacies[i], ". "); ArrayList<String> parsedPriv = new ArrayList<>(); for (int j = 0; j < 4 ; j++){ parsedPriv.add(st.nextToken()); } if(!checkDay(parsedToday, parsedPriv)){ answer.add(i+1); } } int[] result = new int[answer.size()]; for(int i = 0; i < result.length ; i++){ result[i] = answer.get(i); } return result; } static boolean checkDay(ArrayList<String> today, ArrayList<String> privDay){ int todayY = Integer.parseInt(today.get(0)); int todayM = Integer.parseInt(today.get(1)); int todayD = Integer.parseInt(today.get(2)); int privY = Integer.parseInt(privDay.get(0)); int privM = Integer.parseInt(privDay.get(1)) + term.get(privDay.get(3)); int privD = Integer.parseInt(privDay.get(2)); if(privM > 12){ if(privM % 12 == 0){ privY += (privM / 12) - 1; privM = 12; } else { privY += (privM / 12); privM %= 12; } } int[] todayA = {todayY, todayM, todayD}; int[] priv = {privY, privM, privD}; if(todayY > privY) { return false; } if(todayY == privY && todayM > privM) { return false; } if(todayY == privY && todayM == privM && todayD >= privD) { return false; } return true; } }