[Programmers] Lv1 개인정보 수집 유효기간 Java
2023. 2. 3. 15:59ㆍCS/자료구조 & 알고리즘
728x90
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
- 이 문제는 날짜를 계산하고 비교해야 된다.
- 여기서 모든 월은 28일이라고 하니 아래와 같이 하나의 값으로 대체할 수 있다.
- 값 = year12/28 + month*28 + day
- 이를 이용하면 날짜 덧셈과 비교가 간단해진다.
- 위를 알고 있으면 이 문제는 다음과 같이 간단하게 변환 된다.
- 날짜를 term 만큼 더한 후 오늘날짜와 비교하고 파기해야 할 정보를 List에 담는다
- 여기서 term을 HashMap을 이용하여 키와 값으로 이용하기 편리한 상태로 변환해서 더했다.
- 이후 파기해야 하는 것을 리스트에 인덱스 값을 넣고 그것을 스트림을 이용하여 Integer을 int로 변환하였다.
소스 코드
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; public class Solution { public int get_date(String date) { int[] datesArr = Arrays.stream(date.split("\\\\.")).mapToInt(Integer::parseInt).toArray(); return datesArr[0] * 12 * 28 + datesArr[1] * 28 + datesArr[2]; } public int[] solution(String today, String[] terms, String[] privacies) { HashMap<String, Integer> termMap = new HashMap<>(); for(String term : terms) { String[] termArr = term.split(" "); termMap.put(termArr[0], Integer.parseInt(termArr[1])); } int index = 1; ArrayList<Integer> result = new ArrayList<>(); for (String privacyS : privacies) { String[] priDateAndTerm = privacyS.split(" "); if (get_date(priDateAndTerm[0]) + termMap.get(priDateAndTerm[1]) * 28 <= get_date(today)) result.add(index); index++; } return Arrays.stream(result.toArray()).mapToInt(i->(int)i).toArray(); } }
728x90
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[Programmers] Lv1 햄버거 만들기 Java (0) | 2023.02.04 |
---|---|
[Programmers] Lv1 둘만의 암호 Java (0) | 2023.02.03 |
[Programmers] Lv0 치킨 쿠폰 Java (0) | 2023.02.02 |
[Programmers] Lv0 유한소수 판별하기 Java (0) | 2023.02.02 |
[Programmers] Lv0 등수 매기기 Java (0) | 2023.02.02 |