반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
입출력
이 문제는 2023 카카오 겨울 인터십 문제로 프로그래머스 1단계 문제이다.
문자열을 잘 파싱만 하면 어렵지 않게 해결 할 수 있는 문제지만 입력 받는 개인정보 유효한 달 수가 1~100 이라는 점을 잘 생각해서 코드를 짜야 오류를 막을 수 있다.
그 부분과 날짜를 계산하는 부분만 신경쓴다면 크게 어렵지는 않은 문제이다.
import java.util.*;
class Solution {
public static void main(String[] args) {
String today = "2022.05.19";
String[] terms = {"A 6", "B 12", "C 3"};
String[] privacies = {"2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"};
System.out.println(Arrays.toString(solution(today,terms, privacies)));
}
static public int[] solution(String today, String[] terms, String[] privacies) {
HashMap<String, Integer> map = new HashMap<>();
ArrayList<Integer> resultArr = new ArrayList<>();
String[] todayStringArr = today.split("\\.");
int[] todayIntArr = new int[todayStringArr.length];
for (int i = 0; i < todayStringArr.length; i++){
todayIntArr[i] = Integer.parseInt(todayStringArr[i]);
}
for (String term : terms) {
StringTokenizer st = new StringTokenizer(term);
String agreeElement = st.nextToken();
int termMonth = Integer.parseInt(st.nextToken());
int termYear = termMonth / 12;
termMonth = termMonth % 12;
int year = todayIntArr[0] - termYear;
int month = todayIntArr[1] - termMonth;
int day = todayIntArr[2];
if (month <= 0) {
month += 12;
year -= 1;
}
if (day == 28) {
day = 1;
month += 1;
if (month > 12) {
month = 1;
year += 1;
}
} else day += 1;
String expirationDate = String.format("%04d%02d%02d", year, month, day);
map.put(agreeElement, Integer.parseInt(expirationDate));
}
for (int i = 0; i < privacies.length; i++){
StringTokenizer st = new StringTokenizer(privacies[i]," ");
String privacyDate = st.nextToken();
String termElement = st.nextToken();
String[] privacyDateArr = privacyDate.split("\\.");
StringBuilder sb = new StringBuilder();
for (String x : privacyDateArr){
sb.append(x);
}
int expirationDate = Integer.parseInt(sb.toString());
if (map.containsKey(termElement) && map.get(termElement) > expirationDate) {
resultArr.add(i+1);
}
}
Collections.sort(resultArr);
int[] answer = new int[resultArr.size()];
for(int i = 0; i < answer.length; i++){
answer[i] = resultArr.get(i);
}
return answer;
}
}
느낀점
해당 문제 같은 경우는 딱히 어려운 부분은 없었지만 입력받을 수 있는 날짜의 범위가 1~100 으로 생각하지 않고 1~12인줄 착각하여 왜 이게 아니지? 하고 시간을 오래 써먹어버렸다.. 입력받을 수 있는 값 등 문제를 잘 읽는 버릇을 길러야 겠다...
반응형
'코딩테스트(Java) > 프로그래머스 1단계' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 - JAVA (0) | 2024.02.28 |
---|---|
[프로그래머스] 달리기 경주 - JAVA (0) | 2024.02.27 |
[프로그래머스] 공원 산책 - JAVA (1) | 2024.02.27 |
[프로그래머스] 가장 많이 받은 선물 - JAVA (2) | 2024.02.27 |