프로그래머스 알고리즘 문제풀이 정리 (개인정보 수집 유효기간)

황제연·2024년 3월 26일
0

알고리즘

목록 보기
23/169
post-thumbnail
문제 출처제목난이도
2023 KAKAO BLIND RECRUITMENT개인정보 수집 유효기간Lv. 1

개인정보 수집 유효기간

해결코드:

import java.util.*;

class Solution {
    public List<Integer> solution(String today, String[] terms, String[] privacies) {
        List<Integer> answer = new ArrayList<>();
        Map<String, Integer> map = new HashMap<>();
        for(int i=0; i<terms.length; i++){
            String[] tmp = terms[i].split(" ");
            map.put(tmp[0], Integer.parseInt(tmp[1]));
        }
        String[] tmp = today.split("\\.");
        int todays = Integer.parseInt(tmp[0])*12*28 + Integer.parseInt(tmp[1])*28 + Integer.parseInt(tmp[2]);
        for(int i=0; i<privacies.length; i++){
            String[] input = privacies[i].split(" ");
            String[] dates = input[0].split("\\.");
            int days = Integer.parseInt(dates[0])*12*28 + Integer.parseInt(dates[1])*28 + Integer.parseInt(dates[2]);
            days += map.get(input[1]) * 28;
            if(todays >= days){
                answer.add(i+1);
            }
        }
        
        
        return answer;
    }
}

고민의 시간과 해결 방법:

  1. 문자열을 가지고 하는 문제라 많은 에러와 디버깅을 통해 해결하였다
  2. split을 적극적으로 활용하는 문제였고, 추가적으로 map을 사용하여 더 쉽게 해결하였다
  3. terms를 문제에서 알파벳이 중복되지 않는다는 조건이 주어졌기 때문에 map을 사용하여 깔끔하게 저장하였다. (만약 map을 못 쓴다면 if문을 또 빼곡하게 작성해야했을 것이다..)
  4. 날짜를 연도, 월, 일로 split해서 저장하고 또 각각을 비교할까 했는데, 또 이러면 if문을 빼곡하게 작성해야하고 변수의 수도 너무 늘어나서 코드 작성도중 헤매이게 된다...
  5. 따라서 아예 전부 일로 통일해서 하나의 변수에 저장하고 비교하도록 하였다
  6. 연도에는 12와 28을 곱해주고 월에는 28을 곱해서 todays라는 변수에 저장한다
  7. 이제 privacies배열을 순회한다. 두번의 split을 진행해서 똑같이 days라는 변수에 5~6번을 진행해주고 추가로 처음 split했을 때의 알파벳을 이용하여 map에서 해당하는 값을 찾아 days에 월이기 때문에 28을 곱해서 더해준다
  8. 마지막으로 비교를 진행한다. todays가 days보다 크거나 같으면 answer에 i+1을 add한다. 처음 문제에서 주어진 반환타입은 배열이었으나 그 크기를 짐작할 수 없으므로 List로 바꿔서 리턴하였다.

문제 링크:

개인정보 수집 유효기간

profile
Software Developer

0개의 댓글