문제: https://school.programmers.co.kr/learn/courses/30/lessons/150370
1. 코드
import java.util.*;
class Solution {
public List <Integer> solution(String today, String[] terms, String[] privacies) {
List <Integer> answer = new ArrayList<>();
for(int i = 0; i < privacies.length; i++) {
int year = Integer.parseInt(privacies[i].substring(0, 4));
int month = Integer.parseInt(privacies[i].substring(5, 7));
int day = Integer.parseInt(privacies[i].substring(8, 10));
int term = 0;
for(int j = 0; j < terms.length; j++) {
if(privacies[i].charAt(11) == terms[j].charAt(0)) {
term = Integer.parseInt(terms[j].substring(2));
break;
}
}
for(int j = 1; j <= term * 28; j++) {
if(++day > 28) {
day = 1;
if(++month > 12) {
month = 1;
year++;
}
}
}
StringBuilder limit = new StringBuilder();
limit.append(year);
if(month < 10) limit.append(".0").append(month);
else limit.append(".").append(month);
if(day < 10) limit.append(".0").append(day);
else limit.append(".").append(day);
if(limit.toString().compareTo(today) <= 0)
answer.add(i + 1);
}
return answer;
}
}
2. 설명
List <Integer> answer = new ArrayList<>();
for(int i = 0; i < privacies.length; i++) {
int year = Integer.parseInt(privacies[i].substring(0, 4));
int month = Integer.parseInt(privacies[i].substring(5, 7));
int day = Integer.parseInt(privacies[i].substring(8, 10));
int term = 0;
반복문을 통해서 privacies에 접근하여 날짜 정보를 연도, 월, 일을 각각의 정수형으로 분리하여 저장합니다.
for(int j = 0; j < terms.length; j++) {
if(privacies[i].charAt(11) == terms[j].charAt(0)) {
term = Integer.parseInt(terms[j].substring(2));
break;
}
}
그리고 반복문을 통해서 privacies에 약관의 정보와 terms에 약관의 정보가 동일한 것을 찾아 terms의 기간을 찾아내어 저장합니다.
for(int j = 1; j <= term * 28; j++) {
if(++day > 28) {
day = 1;
if(++month > 12) {
month = 1;
year++;
}
}
}
그리고 terms의 기간만큼 날짜를 올려줍니다. day부터 month, year 순차적으로 올립니다. 그렇게 되면 결과적으로 정보 보관이 불가능한 파기일의 첫 번째 날이 됩니다.
StringBuilder limit = new StringBuilder();
limit.append(year);
if(month < 10) limit.append(".0").append(month);
else limit.append(".").append(month);
if(day < 10) limit.append(".0").append(day);
else limit.append(".").append(day);
if(limit.toString().compareTo(today) <= 0)
answer.add(i + 1);
월과 일이 10 이하라면 0을 붙여서 날짜를 문자열로 만들어 줍니다. 그리고 compareTo를 이용하여 파기일과 동일하거나 크다면 해당 개인정보는 파기해야 하는 정보이기에 answer에 추가해 줍니다.
3. 정리
- 날짜 정보를 분리하여 순차적으로 증가
- 날짜로서 비교하기 위해 비교 대상 형식 통일
- compareTo를 이용하여 날짜 비교
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 172928번: 공원 산책 [Java] (0) | 2023.08.19 |
---|---|
프로그래머스 - 178871번: 달리기 경주 [Java] (0) | 2023.08.18 |
프로그래머스 - 161990번: 바탕화면 정리 [Java] (0) | 2023.08.16 |
프로그래머스 - 118666번: 성격 유형 검사하기 [Java] (0) | 2023.08.15 |
프로그래머스 - 133502번: 햄버거 만들기 [Java] (0) | 2023.08.14 |