문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
나의 풀이
import java.util.Arrays;
import java.util.HashMap;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
int priLen = privacies.length;
int[] answer = new int[priLen];
HashMap<String, Integer> map = new HashMap<>();
int todays = getDays(today, 0);
for (String str : terms) {
String[] term = str.split(" ");
map.put(term[0], Integer.parseInt(term[1]));
}
for (int i = 0; i < priLen; i++) {
String[] privacy = privacies[i].split(" ");
int endDays = getDays(privacy[0], map.get(privacy[1]));
answer[i] = endDays <= todays ? i + 1 : 0;
}
return Arrays.stream(answer).filter(num -> num > 0).toArray();
}
private int getDays(String date, int term) {
String[] today = date.split("\\.");
int year = Integer.parseInt(today[0]);
int month = Integer.parseInt(today[1]);
int day = Integer.parseInt(today[2]);
return ((year * 12) + month + term) * 28 + day;
}
}
약관 종류를 담는 HashMap 객체를 생성하여 terms 길이만큼 순회하여 map에 담는다. 이 때 terms의 길이 n 만큼 순회하므로 시간 복잡도는 O(n)이고 선형이다.
또 privacies 길이만큼 순회하여 약관의 마감 날짜를 계산한다. 이 때 privacies의 길이 n 만큼 순회하므로 시간 복잡도는 O(n)이고 선형이다.
getDays 메서드는 날짜와 기간을 인자로 받아서 일 수로 계산하여 반환한다.
따라서, 이 풀이는 2O(n)의 시간 복잡도를 갖게 되고 알고리즘 분석으로 증가 차수는 선형이 된다.
'알고리즘 & 문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기(java) (0) | 2023.02.02 |
---|---|
[프로그래머스] 햄버거 만들기(java) (0) | 2023.02.02 |
[프로그래머스] 문자열 나누기(java) (0) | 2023.02.02 |
[프로그래머스] 가장 가까운 같은 글자(java) (0) | 2023.02.02 |
[프로그래머스] 크기가 작은 부분 문자열(java) (0) | 2023.01.29 |