https://school.programmers.co.kr/learn/courses/30/lessons/150370
2023년도 카카오 블라인드 채용 코딩테스트 문제입니다.
프로그래머스 기준 현재 570명 풀이 완료 및 27%의 정답률을 기록하고 있습니다.
아마도 나온지 얼마 안 돼서 정답률은 낮아보이지만, 실제로는 어렵지 않은 문제입니다.
문제 풀이 및 접근 방법
고객의 개인정보 수집 일자와 약관의 종류에 따라 고객의 개인정보 수집 일자를 구하고,
그걸 오늘 날짜와 비교해서 파기해야하는 정보인지 아닌지 찾는 문제입니다.
카카오에서 평소 출제하는 문제보다는 쉬운 난이도의 구현 문제입니다.
저는 이 문제를 풀기 위해서 다음과 같이 접근했습니다.
- 문제에서 주어진 오늘 날짜를 일자로 치환한다.
- 주어지는 약관의 종류와 기간을 HashMap에 저장한다.
- 주어지는 privacies를 하나하나 일자로 변경한 후 오늘 날짜의 일자와 비교해서 작다면 정답처리를 한다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Solution {
public static List<Integer> solution(String today, String[] terms, String[] privacies) {
List<Integer> answer = new ArrayList<>();
// 0. today의 날을 일자로 환산
String[] todayDateInfo = today.split("\\.");
int dateCountOfToday = getDate(todayDateInfo);
// 1. 약관을 map에 저장한다.
HashMap<String, Integer> typeOfTerms = new HashMap<>();
for (String term : terms) {
typeOfTerms.put(term.split(" ")[0], Integer.parseInt(term.split(" ")[1]));
}
// 2. 날을 모두 더해서 today와 비교한다.
for (int i = 0; i < privacies.length; i++) {
String[] privacy = privacies[i].split(" ");
String[] privacyDateInfo = privacy[0].split("\\.");
int termMonthOfPrivacy = typeOfTerms.get(privacy[1]);
int dateCountOfPrivacy = getDate(privacyDateInfo);
if (isDestroyed(dateCountOfToday, dateCountOfPrivacy, termMonthOfPrivacy)) {
answer.add(i + 1);
}
}
return answer;
}
private static boolean isDestroyed(int dateCountOfToday, int dateCountOfPrivacy, int termMonthOfPrivacy) {
if (dateCountOfToday >= getDateWithTerm(dateCountOfPrivacy, termMonthOfPrivacy)) {
return true;
}
return false;
}
private static int getDate(String[] dateInfo) {
int dateOfYear = Integer.parseInt(dateInfo[0]) * 12 * 28;
int dateOfMonth = Integer.parseInt(dateInfo[1]) * 28;
int dateOfDay = Integer.parseInt(dateInfo[2]);
return dateOfYear + dateOfMonth + dateOfDay;
}
private static int getDateWithTerm(int dateCountOfPrivacy, int termMonthOfPrivacy) {
return dateCountOfPrivacy + termMonthOfPrivacy * 28;
}
}
'PS' 카테고리의 다른 글
[자바] 백준 2573 : 빙산 / dfs, bfs 풀이 (비슷한 문제) (0) | 2023.01.18 |
---|---|
[자바] 백준 13023 : ABCDE / 그래프, DFS 풀이 (1) | 2023.01.16 |
[자바] 백준 1328 : 고층 빌딩 (DP 풀이) 접근 방법 및 풀이 (1) | 2022.12.27 |
[자바] 프로그래머스 : 여행경로 (DFS 백트래킹) / 접근 방법 및 풀이 (0) | 2022.12.21 |
[자바] 프로그래머스 - 명예의 전당 (1) / 구현 문제 Stream 풀이 (0) | 2022.11.25 |