1. ๋ฌธ์ ์ค๋ช
(1) ์ค๋์ด ๋ช๋ , ๋ช์, ๋ฉฐ์น ์ธ์ง ์๋ ค์ฃผ๊ณ , ๊ฐ์ธ์ ๋ณด์ ์ ํ๋ณ๋ก ์ ๋ณด ๋ณด๊ด ๊ธฐ๊ฐ์ ์๋ ค์ค๋ค.
(2) String ๋ฐฐ์ด ํํ๋ก, ์ ๋ณด๊ฐ ์์ง๋ ๋ ์ง
, ๊ฐ์ธ์ ๋ณด์ ์ ํ
์ด ์ฃผ์ด์ง ๋, ์ฃผ์ด์ง ๋ฐฐ์ด์์ ์ค๋ ํ๊ธฐ๋ ์ ๋ณด๊ฐ ๋ฌด์์ธ์ง, ๋ฒํธ๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ฐํํ๋ผ.
2. ์ ๊ทผ ๋ฐฉ์
KEY WORD
: ๋ฌธ์์ด ์๋ฅด๊ธฐ
ํด๋น ๋ฌธ์ ์ ์ ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ค.
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] |
์ฌํ ๋ค๋ฅธ ๋ฌธ์ ๋ค๊ณผ ๋ค๋ฅด๊ฒ, ํด๋น ๋ฌธ์ ๋ ํ๋์ ๋ฌธ์์ด์ ์ฌ๋ฌ๊ฐ์ง ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ค. ๋ํ ํด๋น ์๋ฏธ๊ฐ "." ํน์ ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถ๋์ด ์๊ธฐ๋ ํ๋ค.
๋ฐ๋ผ์ ํด๋น ๋ฌธ์ ๋ ๋ฌธ์์ด์ ์๋ฏธ๋ณ๋ก ์ ์ ํ ์๋ผ์ ์ฌ์ฉํ ์ ์๋์ง๋ฅผ ๋ฌป๊ณ ์๋ ๋ฌธ์ ์ด๋ค. ๋๋ ์ด๋ฅผ ์ํด์ StringTokenizer
๋ฅผ ์ผ๋ค. StringTokenizer(๊ฐ, delim, delim ํฌํจ์ฌ๋ถ boolean)์ ์ธ์๊ฐ ๋ค์ด๊ฐ๋ค. delim์ด ๋ฌธ์์ด์ ๋๋๋ ๊ธฐ์ค์ด ๋๋ฉฐ, 3๋ฒ์งธ ์ธ์์ true, false ์ฌ๋ถ์ ๋ฐ๋ผ delim์ด ํฌํจ๋ ์ง ์๋ ์ง๊ฐ ๊ฒฐ์ ์ด ๋๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.*;
class Solution {
// 1. map์ ๊ฐ ์ ์ฅ
// 2. ์ ์ฅํ ๊ฐ์ธ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก, ํ๊ธฐํด์ผํ ๋ ์ง ๊ณ์ฐ
// (1) ๋ฌ + ์ ์ฅ๊ธฐ๊ฐ
// (2) ๋ฌ + ์ ์ฅ๊ธฐ๊ฐ์ด 12๊ฐ์์ ์ด๊ณผํ๋ฉด, ๋
๋ +1
// (3) ์ผ์ ํ์ฌ ์ผ์ -1 (๋ง์ฝ 1์ผ์ด๋ผ๋ฉด 28์ผ๋ก ๋ณ๊ฒฝ)
// 3. today๋ ๋น๊ตํด์ ํ์ฌ ํ๊ธฐํด์ผํ๋์ง ํ์ธ
static ArrayList<Integer> ans = new ArrayList<>();
static HashMap<String, Integer> map = new HashMap<>();
static int nowYear = 0;
static int nowMonth = 0;
static int nowDays = 0;
public int[] solution(String today, String[] terms, String[] privacies) {
StringTokenizer dDay = new StringTokenizer(today, ".", false);
nowYear = Integer.parseInt(dDay.nextToken());
nowMonth = Integer.parseInt(dDay.nextToken());
nowDays = Integer.parseInt(dDay.nextToken());
// map์ ๊ฐ ์ ์ฅ
for(int i = 0; i < terms.length; i ++){
StringTokenizer st = new StringTokenizer(terms[i], " ", false);
map.put(st.nextToken(), Integer.parseInt(st.nextToken()));
}
// ๋ง๋ฃ์ผ ๊ณ์ฐ
for(int i = 0; i < privacies.length; i++){
StringTokenizer outer = new StringTokenizer(privacies[i]);
StringTokenizer inner = new StringTokenizer(outer.nextToken(), ".", false);
String term = outer.nextToken();
int expire = map.get(term);
int year = Integer.parseInt(inner.nextToken());
int month = Integer.parseInt(inner.nextToken());
int days = Integer.parseInt(inner.nextToken());
month += expire;
if(month > 12){
if(month%12 == 0){
year += month/12 -1;
month = 12;
}else {
year += month/12;
month = month%12;
}
}
days -= 1;
if(days == 0){
month --;
days = 28;
}
System.out.printf("ํ๊ธฐ ๋ ์ง: %d.%d.%d\n", year, month, days);
if(nowYear > year) {
ans.add((i+1));
}else if(nowYear == year && nowMonth > month){
ans.add((i+1));
}else if(nowYear == year && nowMonth == month && nowDays > days){
ans.add((i+1));
}
}
return ans.stream().mapToInt(i -> i).toArray();
}
}
4. ์ฑ์ฅ ํ๊ธฐ
month += expire;
if(month > 12){
if(month%12 == 0){
year += month/12 -1;
month = 12;
}else {
year += month/12;
month = month%12;
}
}
days -= 1;
if(days == 0){
month --;
days = 28;
}
System.out.printf("ํ๊ธฐ ๋ ์ง: %d.%d.%d\n", year, month, days);
if(nowYear > year) {
ans.add((i+1));
}else if(nowYear == year && nowMonth > month){
ans.add((i+1));
}else if(nowYear == year && nowMonth == month && nowDays > days){
ans.add((i+1));
}
์ด๊น์ง์ ์์ ๋ณด๋ฉด, ๊ตณ์ด ๋
, ์, ์ผ์ ๋ฐ๋ก ๊ณ์ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด์, ๋ฌธ์ ๋ฅผ ๊ธฐ์กด๋ณด๋ค ๋ ์ด๋ ต๊ฒ ํ์๋ค. ๋
๊ณผ ์์ ๋ชจ๋ ์ ์ผ ์์ ๋จ์์ธ ์ผ(day)๋ก ์นํํ ์ ์๋ค. ๋ํ ๋ฌธ์ ์์ ๋ชจ๋ ๋ฌ์ 28์ผ๋ก๋ง ์ด๋ฃจ์ด์ก๋ค๊ณ ํ๊ธฐ์, ํด๋น ๊ณ์ฐ์ด ํจ์ฌ ์ฝ๋ค. ๋ฐ๋ผ์ year -> day
: (year) x 12 x 28, month -> day
: (month) x 28 ๋ก ๋ํ๋ผ ์ ์์ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์ด์ฉํด ๋ชจ๋ day๋ก ์นํ ํ ๋ฌธ์ ๋ฅผ ํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ if, else๋ฌธ์ ํฅ์ฐ์ ํผํ ์ ์๋ค!
public boolean isExpire(int year, int month, int day, int expire) {
int input = year*12*28 + month*28 + day + expire*28;
int now = nowYear*12*28 + nowMonth*28 + nowDays;
return input <= now? true : false;
}
์ด๋ฐ์์ผ๋ก ์นํํด์ ๋น๊ตํ๋ ํจ์๋ฅผ ๋ง๋ค๋ฉด
if(isExpire(Integer.parseInt(inner.nextToken()),
Integer.parseInt(inner.nextToken()),
Integer.parseInt(inner.nextToken()),
map.get(outer.nextToken()))) ans.add((i+1));
input ๊ฐ๋ง ์ ์ ํ ๋ฃ์ด์ฃผ๋ฉด ๋ฐ๋ก ๊ฐ์ธ์ ๋ณด ๋ณด๊ด ๊ธฐ๊ฐ์ ๋ง๋ฃ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.