[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ธ์ ๋ณด ์์ง ์ ํจ๊ธฐ๊ฐ(java)
๐ณ๋ฌธ์ ์ค๋ช
๊ณ ๊ฐ์ ์ฝ๊ด ๋์๋ฅผ ์ป์ด์ ์์ง๋ 1~n๋ฒ์ผ๋ก ๋ถ๋ฅ๋๋ ๊ฐ์ธ์ ๋ณด n๊ฐ๊ฐ ์์ต๋๋ค. ์ฝ๊ด ์ข ๋ฅ๋ ์ฌ๋ฌ ๊ฐ์ง ์์ผ๋ฉฐ ๊ฐ ์ฝ๊ด๋ง๋ค ๊ฐ์ธ์ ๋ณด ๋ณด๊ด ์ ํจ๊ธฐ๊ฐ์ด ์ ํด์ ธ ์์ต๋๋ค. ๋น์ ์ ๊ฐ ๊ฐ์ธ์ ๋ณด๊ฐ ์ด๋ค ์ฝ๊ด์ผ๋ก ์์ง๋๋์ง ์๊ณ ์์ต๋๋ค. ์์ง๋ ๊ฐ์ธ์ ๋ณด๋ ์ ํจ๊ธฐ๊ฐ ์ ๊น์ง๋ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ๋ค๋ฉด ๋ฐ๋์ ํ๊ธฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, A๋ผ๋ ์ฝ๊ด์ ์ ํจ๊ธฐ๊ฐ์ด 12 ๋ฌ์ด๊ณ , 2021๋
1์ 5์ผ์ ์์ง๋ ๊ฐ์ธ์ ๋ณด๊ฐ A์ฝ๊ด์ผ๋ก ์์ง๋์๋ค๋ฉด ํด๋น ๊ฐ์ธ์ ๋ณด๋ 2022๋
1์ 4์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ 2022๋
1์ 5์ผ๋ถํฐ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์
๋๋ค.
๋น์ ์ ์ค๋ ๋ ์ง๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด ๋ฒํธ๋ค์ ๊ตฌํ๋ ค ํฉ๋๋ค.
๋ชจ๋ ๋ฌ์ 28์ผ๊น์ง ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ค์์ ์ค๋ ๋ ์ง๊ฐ 2022.05.19์ผ ๋์ ์์์ ๋๋ค.
์ฝ๊ด ์ข ๋ฅ์ ํจ๊ธฐ๊ฐ
A | 6 ๋ฌ |
B | 12 ๋ฌ |
C | 3 ๋ฌ |
๋ฒํธ๊ฐ์ธ์ ๋ณด ์์ง ์ผ์์ฝ๊ด ์ข ๋ฅ
1 | 2021.05.02 | A |
2 | 2021.07.01 | B |
3 | 2022.02.19 | C |
4 | 2022.02.20 | C |
- ์ฒซ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ A์ฝ๊ด์ ์ํด 2021๋ 11์ 1์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
- ๋ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ B์ฝ๊ด์ ์ํด 2022๋ 6์ 28์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋์ง ์์์ผ๋ฏ๋ก ์์ง ๋ณด๊ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ธ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ C์ฝ๊ด์ ์ํด 2022๋ 5์ 18์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
- ๋ค ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ C์ฝ๊ด์ ์ํด 2022๋ 5์ 19์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋์ง ์์์ผ๋ฏ๋ก ์์ง ๋ณด๊ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด ๋ฒํธ๋ [1, 3]์ ๋๋ค.
์ค๋ ๋ ์ง๋ฅผ ์๋ฏธํ๋ ๋ฌธ์์ด today, ์ฝ๊ด์ ์ ํจ๊ธฐ๊ฐ์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด terms์ ์์ง๋ ๊ฐ์ธ์ ๋ณด์ ์ ๋ณด๋ฅผ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด privacies๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋ฒํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก 1์ฐจ์ ์ ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๐ณ์ ์ ์ฌํญ
- today๋ "YYYY.MM.DD" ํํ๋ก ์ค๋ ๋ ์ง๋ฅผ ๋ํ๋ ๋๋ค.
- 1 ≤ terms์ ๊ธธ์ด ≤ 20
- terms์ ์์๋ "์ฝ๊ด ์ข ๋ฅ ์ ํจ๊ธฐ๊ฐ" ํํ์ ์ฝ๊ด ์ข ๋ฅ์ ์ ํจ๊ธฐ๊ฐ์ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถํ ๋ฌธ์์ด์ ๋๋ค.
- ์ฝ๊ด ์ข ๋ฅ๋ A~Z์ค ์ํ๋ฒณ ๋๋ฌธ์ ํ๋์ด๋ฉฐ, terms ๋ฐฐ์ด์์ ์ฝ๊ด ์ข ๋ฅ๋ ์ค๋ณต๋์ง ์์ต๋๋ค.
- ์ ํจ๊ธฐ๊ฐ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณด๊ดํ ์ ์๋ ๋ฌ ์๋ฅผ ๋ํ๋ด๋ ์ ์์ด๋ฉฐ, 1 ์ด์ 100 ์ดํ์ ๋๋ค.
- 1 ≤ privacies์ ๊ธธ์ด ≤ 100
- privacies[i]๋ i+1๋ฒ ๊ฐ์ธ์ ๋ณด์ ์์ง ์ผ์์ ์ฝ๊ด ์ข ๋ฅ๋ฅผ ๋ํ๋ ๋๋ค.
- privacies์ ์์๋ "๋ ์ง ์ฝ๊ด ์ข ๋ฅ" ํํ์ ๋ ์ง์ ์ฝ๊ด ์ข ๋ฅ๋ฅผ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถํ ๋ฌธ์์ด์ ๋๋ค.
- ๋ ์ง๋ "YYYY.MM.DD" ํํ์ ๊ฐ์ธ์ ๋ณด๊ฐ ์์ง๋ ๋ ์ง๋ฅผ ๋ํ๋ด๋ฉฐ, today ์ด์ ์ ๋ ์ง๋ง ์ฃผ์ด์ง๋๋ค.
- privacies์ ์ฝ๊ด ์ข ๋ฅ๋ ํญ์ terms์ ๋ํ๋ ์ฝ๊ด ์ข ๋ฅ๋ง ์ฃผ์ด์ง๋๋ค.
- today์ privacies์ ๋ฑ์ฅํ๋ ๋ ์ง์ YYYY๋ ์ฐ๋, MM์ ์, DD๋ ์ผ์ ๋ํ๋ด๋ฉฐ ์ (.) ํ๋๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
- 2000 ≤ YYYY ≤ 2022
- 1 ≤ MM ≤ 12
- MM์ด ํ ์๋ฆฟ์์ธ ๊ฒฝ์ฐ ์์ 0์ด ๋ถ์ต๋๋ค.
- 1 ≤ DD ≤ 28
- DD๊ฐ ํ ์๋ฆฟ์์ธ ๊ฒฝ์ฐ ์์ 0์ด ๋ถ์ต๋๋ค.
- ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด๊ฐ ํ๋ ์ด์ ์กด์ฌํ๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋๋ค.
๐ณ์ ์ถ๋ ฅ ์
today | terms | privacies | result |
"2022.05.19" | ["A 6", "B 12", "C 3"] | ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] | [1, 3] |
"2020.01.01" | ["Z 3", "D 5"] | ["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"] | [1, 4, 5] |
๐ณ๋์ ํ์ด
๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ํด์ํด๋ณด๋ฉด ํ์ฌ ์ผ์ ๊ธฐ์ค์ผ๋ก ๊ณ์ฝํ ์ฝ๊ด์ค ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ ํ๊ธฐํด์ผ ํ ์ฝ๊ด์ ์์๋ด๋ ๋ฌธ์ ์ด๋ค.
๋ด๊ฐ ํ๋ ์๊ฐ
1. ์ค๋ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ธฐ๊ฐ์ ์ผ์๋ก ๋ณ๊ฒฝํ์.
2. ๋์ ๋๋ฆฌ ํํ๋ก terms์ privacies๋ฅผ ์ ์ฅํ ์ ์์๊น? (ํด๊ฒฐ ๋ชปํจ)
3. ์ ๋ค๋ฆญ ํด๋์ค๋ฅผ ์ด์ฉํ๊ณ ์ถ์ง๋ง ์ง์์ด ๋ถ์กฑํ๋ค.. ๋ณต์กํ๋๋ผ๋ ๋ด ๋ฐฉ์์ผ๋ก ํ์ด๋ณด์
3. terms์ ์ฝ๊ด ์ข ๋ฅ์ privacies์ ์ฝ๊ด ์ข ๋ฅ๋ฅผ ์ด๋ป๊ฒ ์ฐ๊ฒฐ ์ง์ ์ ์์๊น?
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
//์ค๋ ๋ ์ง ๋ฐ์ดํฐํ ํ๊ธฐ
String [] getSplitToday = today.split("\\.");
int [] intToday = new int[getSplitToday.length];
for(int i = 0; i<getSplitToday.length; i++) {
intToday[i] = Integer.parseInt(getSplitToday[i]);
}
int todayData = intToday[0] * 28 * 12 + intToday[1] * 28 + intToday[2];
int[] answer = new int[privacies.length];
//privacies -> ๋ ์ง + ์ข
๋ฅ
for(int i = 0; i<privacies.length; i++){
String[] getPrivacies = privacies[i].split(" ");
int num = 0;
//๋ด๊ฐ ๊ณ์ฝํ ์ฝ๊ด ์ฐพ๊ณ , num์ ๊ทธ ๊ณ์ฝํ ์ฝ๊ด์ ๊ธฐ๊ฐ ์ ์ฅ.
for(int j = 0; j<terms.length; j++){
String[] getTerms = terms[j].split(" ");
if(getPrivacies[1].equals(getTerms[0])){
num = Integer.parseInt(getTerms[1]);
break;
}
}
String[] getSplitPrivacies = getPrivacies[0].split("\\.");
int[] intPrivacies = new int[getSplitPrivacies.length];
for(int k = 0; k<getSplitPrivacies.length; k++){
intPrivacies[k] = Integer.parseInt(getSplitPrivacies[k]);
}
//๋ฌ ๋ถ๋ถ์ +num์ ํด์ค์ผ๋ก์ ์ต์ข
๊ธฐ๊ฐ ๊ตฌํจ.
int termData = (intPrivacies[0] * 28 *12) + ((intPrivacies[1] + num) * 28) + (intPrivacies[2]) - 1;
//๊ณ์ฝ๊ธฐ๊ฐ์ด ์ง๋ฌ์ ์
if(todayData > termData){
answer[i] = i + 1;
}
}
int size = 0;
for(int i = 0; i<answer.length; i++){
if(answer[i] > 0){
size++;
}
}
int[] arr = new int[size];
int idx = 0;
for(int i = 0; i<answer.length; i++){
if(answer[i] > 0){
arr[idx] = answer[i];
idx ++;
}
}
return arr;
}
}
์ด ์ธ๊ฐ์ง๋ฅผ ์๊ฐํ๋ฉฐ ์ผ๋งค๋ก ํ์ด ๋๋ ํ์ด๋ค.
ํ์ง๋ง JAVA์ ๋ํ ์ง์ ๋ถ์กฑ์ผ๋ก ์ข ๋ ๊ฐํธํ ๊ธฐ๋ฅ์ ๋ง์ด ์ฌ์ฉํ์ง ๋ชปํ๋ฉฐ ํด๊ฒฐ ํ๋๊ฒ ๋๊ปด์ก๋ค.
์ ๋ค๋ฆญ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ๋ฉด ๋๊ฒ ๊ฐ๋จํ๊ฒ ๋ ๊ฑฐ ๊ฐ์์ง๋ง ์ง์ ๋ถ์กฑ์ผ๋ก ํ์ด๋๊ฐ์ง ๋ชปํ๋ค.
์๋๋ ๋ค๋ฅผ๊น ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๋๊น ์ ๋ค๋ฆญ ํด๋์ค๋ฅผ ์ด์ฉํด ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ํ์ด๋ฅผ ๋ณผ ์์์๋ค.
์ ๋ง ๋ด๊ฐ ์ํ๋ ํ์ด ๊ทธ ์ก์ฑ ์๋ค.
๐ณ๋ฐฐ์์ผ ํ ํ์ด
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
List<Integer> answer = new ArrayList<>();
Map<String, Integer> termMap = new HashMap<>();
int date = getDate(today);
for (String s : terms) {
String[] term = s.split(" ");
//key์ value ํํ๋ก terms๋ฅผ termMap์ ์ ์ฅ
termMap.put(term[0], Integer.parseInt(term[1]));
}
for (int i = 0; i < privacies.length; i++) {
String[] privacy = privacies[i].split(" ");
if (getDate(privacy[0]) + (termMap.get(privacy[1]) * 28) <= date) {
answer.add(i + 1);
}
}
return answer.stream().mapToInt(integer -> integer).toArray();
}
private int getDate(String today) {
String[] date = today.split("\\.");
int year = Integer.parseInt(date[0]);
int month = Integer.parseInt(date[1]);
int day = Integer.parseInt(date[2]);
return (year * 12 * 28) + (month * 28) + day;
}
}
๐ณ๋ฐฐ์์ผ ํ ์ง์
Map ์ปฌ๋ ์ ์ ๊ธฐ๋ฅ
- put(), get(), remove(), size(), containsKey(), containsValue()
List ์ปฌ๋ ์ ์ ๊ธฐ๋ฅ
- stream(), mapToInt()