반응형
문제분석:
카카오 2023년 블라인드 채용때 나온 문제다.
카카오 문제는 기본적으로 어렵기때문에 이 문제도 1.5단계라고 생각하면된다.
요점: 만료된 계약 찾기
우선, 약관마다 기간이 다르기때문에, 약관을 다른 공간에 저장해두고 사용해야한다.
매번, 개인정보를 확인할때마다 약관리스트를 찾는건 효율성이 매우 떨어지기때문이다.
약관을 저장할 map을 생성하고, map 에다 약관의 종류와 기간을 입력한다.
이제부터 개인정보에 적용할 약관을 찾는데 O(1)이 걸릴것이다.
이젠 개인정보마다 만료됨의 여부를 체크할것이다.
여부는 isExpire() 메소드를 통해 진행할것이다.
privacy를 "." 으로 분해를 한뒤, 정보를 각각 빼옵니다.
약관에따라 월 단위를 증가 시킵니다.
이 과정에서 월이 12월을 넘어갈수 있으니, 12를 나눠 년을 추가하고, 달 수를 재조정합니다.
정제한 정보를 바탕으로
오늘날과 비교를하여, 만료가 됨을 판단하고 반환합니다.
전체풀이:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
import java.util.*;
class Solution {
Map<String,Integer> map;
public int[] solution(String today, String[] terms, String[] privacies) {
int[] answer = {};
map = new HashMap<>();
List<Integer> list = new ArrayList<>();
for(String term : terms){
String[] arr = term.split(" ");
map.put(arr[0],Integer.parseInt(arr[1]));
}
int idx=1;
for(String privacy: privacies){
if(isExpire(today,privacy)){
list.add(idx);
}
idx++;
}
answer=list.stream().mapToInt(i->i).toArray();
return answer;
}
public boolean isExpire(String today,String privacy){
String[] ls =privacy.split("\\.");
int y = Integer.parseInt(ls[0]);
int m = Integer.parseInt(ls[1]);
String term=ls[2].split(" ")[1];
int d= Integer.parseInt(ls[2].split(" ")[0]);
int period = map.get(term);
m+=period;
y+=(m/12);
m=m%12;
if(m==0){
y-=1;
m=12;
}
String[] tda= today.split("\\.");
int ty = Integer.parseInt(tda[0]);
int tm = Integer.parseInt(tda[1]);
int td = Integer.parseInt(tda[2]);
if(ty>y){
return true;
}
else if(ty==y){
if(tm>m) return true;
else if(tm==m){
if(td>=d) return true;
}
}
return false;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level1' 카테고리의 다른 글
[프로그래머스, java] Level1: 카드뭉치 (0) | 2023.02.17 |
---|---|
[프로그래머스,Java] Level1: 둘만의 암호 (0) | 2023.02.02 |
[프로그래머스,Java] Level1: 햄버거 만들기 (0) | 2022.12.11 |
[프로그래머스, Java] Level0: 겹치는 선분의 길이 (0) | 2022.12.08 |
프로그래머스 [JAVA] Level1: 숫자 짝꿍 (1) | 2022.10.08 |