728x90
https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
메모리: 75.3 MB
시간: 3.82 ms
import java.util.*;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
StringTokenizer st;
// 오늘 날짜 년, 월, 일 분리
st = new StringTokenizer(today, ".");
int[] todayDate = new int[3];
todayDate[0] = Integer.parseInt(st.nextToken()); // 년
todayDate[1] = Integer.parseInt(st.nextToken()); // 월
todayDate[2] = Integer.parseInt(st.nextToken()); // 일
int[] termsMonth = new int['Z' - 'A' + 1]; // 약관 유효기간을 정리한 배열
for(int i = 0; i < terms.length; i++) {
// 약관 종류와 유효기간 분리
st = new StringTokenizer(terms[i]);
int t = st.nextToken().toCharArray()[0] - 'A'; // 약관 종류 번호
termsMonth[t] = Integer.parseInt(st.nextToken()); // 유효기간
}
ArrayList<Integer> result = new ArrayList<>();
for(int i = 0; i < privacies.length; i++) {
// 날짜와 약관 종류 분리
st = new StringTokenizer(privacies[i]);
String d = st.nextToken(); // 날짜
int t = st.nextToken().toCharArray()[0] - 'A'; // 약관 종류
// 날짜 년, 월, 일 분리
st = new StringTokenizer(d, ".");
int[] date = new int[3];
date[0] = Integer.parseInt(st.nextToken());
date[1] = Integer.parseInt(st.nextToken());
date[2] = Integer.parseInt(st.nextToken());
// 보관 가능일 구하기
int[] lastDate = new int[3];
int tmp = date[1] + termsMonth[t];
if(date[2] == 1) {
tmp -= 1;
lastDate[2] = 28;
}
else lastDate[2] = date[2] - 1;
if(tmp % 12 == 0) {
lastDate[0] = date[0] + (tmp - 1) / 12;
lastDate[1] = 12;
}
else {
lastDate[0] = date[0] + tmp / 12;
lastDate[1] = tmp % 12;
}
// 보관 가능일이 이미 지났다면 result에 답 저장
if(todayDate[0] > lastDate[0]) result.add(i + 1);
else if(todayDate[0] == lastDate[0]) {
if(todayDate[1] > lastDate[1]) result.add(i + 1);
else if(todayDate[1] == lastDate[1]) {
if(todayDate[2] > lastDate[2]) result.add(i + 1);
}
}
}
// resut를 배열로 변환 후 반환
return result.stream().mapToInt(i -> i).toArray();
}
}
728x90
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스, Lv.1] 조건에 부합하는 중고거래 댓글 조회하기 (mysql) (0) | 2023.11.16 |
---|---|
[프로그래머스, Lv.3] 표현가능한 이진트리 (java) (0) | 2023.10.27 |
[프로그래머스, Lv.4] 서울에 위치한 식당 목록 출력하기 (mysql) (0) | 2023.07.17 |
[프로그래머스, Lv.2] 3월에 태어난 여성 회원 목록 출력하기 (mysql) (0) | 2023.07.12 |
[프로그래머스] 흉부외과 또는 일반외과 의사 목록 출력하기 (mysql) (0) | 2023.07.12 |