문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/150370


제한 사항

입출력 예


풀이
import java.util.HashMap;
import java.util.ArrayList;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
String[] dateArray = today.split("\\.");
HashMap<String, Integer> termsMap = new HashMap<>();
ArrayList<Integer> answer = new ArrayList<>();
int count = 1;
for (String term : terms) {
String[] tempTerm = term.split(" ");
termsMap.put(tempTerm[0], Integer.valueOf(tempTerm[1]));
}
for (String privacy : privacies) {
String[] tempPrivacy = privacy.split(" ");
int termMonth = Integer.valueOf(termsMap.get(tempPrivacy[1]));
String[] date = tempPrivacy[0].split("\\.");
int monthToYear = 0;
int month = Integer.valueOf(date[1]) + termMonth % 12;
if (month > 12) {
month -= 12;
monthToYear = 1;
}
int year = Integer.valueOf(date[0]) + termMonth / 12 + monthToYear;
int day = Integer.valueOf(date[2]);
if(Integer.valueOf(dateArray[0]) * 12 * 28 + Integer.valueOf(dateArray[1]) * 28
+ Integer.valueOf(dateArray[2]) >= year * 12 * 28 + month * 28 + day) answer.add(count);
count++;
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
후기
2023 KAKAO BLIND RECRUITMENT의 첫 번째 문제이다. 처음에 솔루션 메서드의 매개변수로 주어지는 것들이 String인줄 알고 코드를 작성했다가 다시 보니까 String[]이어서 다시 일부분을 수정했다... 일단 split() 메서드를 이용해서 문자열을 나누어 따로 배열에 저장했다. 그리고 약관 종류에 따른 유효기간을 HashMap에 저장하여 원하는 값을 찾기 쉽게 하였다. 그리고 날짜 처리 부분은 그냥 일 단위로 통일하여 비교 및 처리하였다. 이 문제는 문자열 나누기와 날짜 처리만 잘 할 수 있으면 무난하게 풀 수 있는 정도 같다. 그런데 마지막에 스트림을 사용해서 ArrayList를 Array로 바꾸었는데 스트림을 아직 공부하지 않아서 인터넷에서 찾아서 썼다. 사실 모를 경우에는 for문을 돌려서 직접 변환시켜주면 되지만 줄이 길어질 것 같아서 이렇게 사용했다. 원래는 인터넷 찾아보고 사용하는 것은 자제하고 있는데 모르는 부분은 어쩔 수 없었다ㅠㅠ 더 공부해야할 부분이다. 사실 split() 메서드 사용 시에도 그냥 온점을 사용했는데 안 나눠지길래 인터넷을 찾아봤다. 찾아보니까 해당 메서드의 매개변수가 String이 아니라 정규식이어서 그렇다고 한다. [.] 또는 \\.를 사용하라길래 그렇게 했다. 정규식에 대해서도 한번 찾아봐야겠다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 1] 카드 뭉치 (0) | 2023.06.29 |
|---|---|
| [프로스래머스][JAVA][Lv. 1] 대충 만든 자판 (0) | 2023.06.29 |
| [프로그래머스][JAVA][Lv. 1] 둘만의 암호 (0) | 2023.06.26 |
| [프로그래머스][JAVA][Lv. 1] 덧칠하기 (0) | 2023.05.22 |
| [프로그래머스][JAVA][Lv. 1] 바탕화면 정리 (0) | 2023.05.16 |