새소식

항해 99 TIL

99클럽 코테 스터디 26일차 TIL [Map, 시뮬레이션]

  • -

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

 

내가 작성한 코드는 아래와 같다.

풀이 과정을 떠올린 방법은 아래와 같다.

1. 입력된 날짜와 약관 정보를 숫자로 변환하고, 이를 Map에 저장한다.
2. 각 개인정보에 대해 유효기간을 계산하고, 오늘 날짜와 비교해 파기 대상을 구한다.
3. 파기 대상인 개인정보의 번호를 배열로 반환한다.

import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        int todayDate = changeDay(today);
        
        // 약관, 유효기간 저장
        Map<String, Integer> map = new HashMap<>();
        for (String term : terms) {
            String[] temp = term.split(" ");
            map.put(temp[0], Integer.parseInt(temp[1]));
        }
        
        ArrayList<Integer> answer = new ArrayList<>();
        for (int i = 0; i < privacies.length; i++) {
            String[] info = privacies[i].split(" ");
            String date = info[0];
            String term = info[1];
            
            int expireDay = changeDay(date) + (map.get(term) * 28);
            
            // 파기 대상 여부 확인
            if (expireDay <= todayDate) {
                answer.add(i + 1);
            }
        }
        
        // 리스트를 배열로 변환
        int[] result = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            result[i] = answer.get(i);
        }
        
        return result;
    }
    
    static int changeDay(String date) {
        String[] dates = date.split("\\.");
        int year = Integer.parseInt(dates[0]);
        int month = Integer.parseInt(dates[1]);
        int day = Integer.parseInt(dates[2]);
        return (year * 12 * 28) + (month * 28) + day;
    }
}​


[풀이 과정]

1. changeDay() 메소드를 사용하여 주어진 날짜를 "년, 월, 일" 형식에서 날짜를 일(day) 단위의 숫자로 변환한다.
이때, terms 배열을 순회하면서 약관 종류와 유효기간을 Map에 저장한다. (key: 약관 이름, value: 유효 기간)
2. 각 항목에 대해 수집일자와 약관 종류를 분리한 후, 수집일자를 changeDay 메서드를 사용해 일 단위의 숫자로 변환한다/
3. 변환된 수집일자에 해당 약관의 유효기간을 더해 해당 개인정보의 만료일(expireDay)을 계산한다. 이때, 유효기간은 "달" 단위로 주어지므로, 이를 28일로 곱해 일 단위로 변환한다.
3. 오늘 날짜를 변환한 todayDate와 각 개인정보의 만료일 expireDay를 비교합니다. expireDay <= todayDate인 경우, 만료된 것이므로 파기 대상이 된다. 이러한 개인정보의 번호를 answer 리스트에 저장한다.
4. answer 리스트를 정수 배열로 변환하여 반환한다.

풀이 시간 : 30분

 

내일은 냅색 알고리즘(KnapSack Problem)에 대하여 복습하고, 관련된 문제들을 풀이해보려 한다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.