CS/Algorism

[2023 KAKAO BLIND RECRUITMENT] 개인정보 수집 유효기간

olsohee 2024. 6. 12. 11:14

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

 

프로그래머스

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

programmers.co.kr

 

구현 문제로, 주의할 점은 다음과 같다.

  • 모든 달이 28일까지 있다고 가정한다. 따라서 특정 날짜를 일수로 변환해서 날짜 간 비교하면 된다. 
    • ex, 2021.05.02 ➡️ 2021 * 12 * 28 + 5 * 28 + 2
  • 마침표(.)를 기준으로 문자열을 자르고 싶으면 split(".")이 아니라 split("[.]") 또는 split("\\.")을 사용해야 한다.
    • split() 메소드는 파라미터로 정규식을 입력 받는데, 마침표는 정규식으로 임의의 한 문자를 의미한다.
    • 따라서 마침표로 문자열을 자르고 싶으면 split("[.]") 또는 split("\\.")을 사용해야 한다.
      • split("[.]"): 정규식에서 []는 문자의 집합이나 범위를 의미한다. 
      • split("\\."): 정규식에서 역슬래시(\) 다음에 마침표와 같이 정규식에서 특정 의미를 갖는 특수 문자가 오면 역슬래시 다음에 오는 문자를 일반 문자로 취급한다. 즉, 정규식에서 "\."는 일반 문자 마침표를 의미한다. 그리고 자바의 문자열에서 역슬래시를 표현하기 위해서는 앞에 \를 붙여야 한다. 따라서 "\\."를 통해 마침표를 표현할 수 있다.
import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        
        List<Integer> answerList = new ArrayList<>();
        
        Map<String, Integer> map = new HashMap<>();
        for (String term : terms) {
            String[] termArr = term.split(" ");
            map.put(termArr[0], Integer.parseInt(termArr[1]));
        }
        
        int todayInt = getDate(today);
        
        for (int i = 0; i < privacies.length; i++) {
            String[] privacy = privacies[i].split(" ");
            int startInt = getDate(privacy[0]);
            int term = map.get(privacy[1]);
            if (todayInt >= startInt + term * 28) {
                answerList.add(i + 1);
            }
        }
        
        // 파기할 번호를 오름차순으로 반환
        return answerList.stream()
            .mapToInt(i -> i)
            .toArray();
    }
    
    public int getDate(String date) {
        String[] dateArr = date.split("\\.");
        int year = Integer.parseInt(dateArr[0]);
        int month = Integer.parseInt(dateArr[1]);
        int day = Integer.parseInt(dateArr[2]);
        return (year * 12 * 28) + (month * 28) + day;
    }
}