반응형
문제 출처)
https://school.programmers.co.kr/learn/courses/30/lessons/150370
정답코드 1
solution(today, terms, privacies) {
let results = [];
let map = new Map()
for(let term of terms){
let [type, num] = term.split(' ');
map.set(type, num)
}
for(let i=0; i<privacies.length; i++){
let [dates, type] = privacies[i].split(' ')
let num = map.get(type)
let res = cal(today, dates, num)
if(res) results.push(i+1)
}
return results;
function cal(today, dates, num){
let [y, m, d] = dates.split('.').map(v => +v)
m += Number(num)
if(m > 12){
y += Math.floor((m - 1)/12)
m = (m-1) % 12 + 1
}
d -= 1
if(d === 0){
if(m === 1){
y -= 1;
m = 12
d = 28
}else{
m -= 1
d = 28
}
}
let temp = String(y).padStart(4, '0') + String(m).padStart(2, '0') + String(d).padStart(2, '0')
let today_date = Number(today.split('.').join(''))
let versus_date = Number(temp)
if (versus_date < today_date) return true;
else return false;
}
}
정답코드 2
new Date를 활용한 코드인데,
유효기간이 달 기준이기 때문에
중간에 모든 달은 28일까지라는 문구를 무시해도 된다고 한다.
이해가 안가서 일단 코드만 작성해봤다.
function solution(today, terms, privacies) {
const answer = [];
const expire = new Date(today)
console.log(expire)
const termType = {};
terms.forEach((item) => {
const [type, term] = item.split(' ');
termType[type] = Number(term);
});
privacies.forEach((item, idx) => {
const [date, type] = item.split(' ')
const chDate = new Date(date)
chDate.setMonth(chDate.getMonth() + termType[type])
if(chDate <= expire) answer.push(idx + 1);
})
return answer;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스: 택배 배달과 수거하기- javascript(구현) (1) | 2024.03.16 |
---|---|
백준 2529: 부등호 - javascript(완전탐색/dfs) (0) | 2024.03.16 |
백준 16236: 아기 상어 - javascript(bfs) (2) | 2024.03.14 |
백준 1932: 정수 삼각형 - javascript(dp) (1) | 2024.03.14 |
백준 2847: 게임을 만든 동준이 - javascript(그리디) (0) | 2024.03.14 |