새소식

알고리즘 테스트 ⏲/프로그래머스

[KAKAO RECRUITMENT] 개인정보 수집 유효기간 풀이 / JavaScript

  • -
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

작성 코드 (1차시도 / 통과)

function solution(today, terms, privacies) {
  const term = {};
  terms.forEach((v) => {
    const [a, b] = v.split(" ");
    term[a] = parseInt(b);
  });
  let answer = [];
  privacies.forEach((p, idx) => {
    let y, m, d;
    let [date, tm] = p.split(" ");
    let [pYear, pMonth, pDay] = date.split(".").map((v) => parseInt(v));
    y = pYear + parseInt((pMonth + term[tm]) / 12);
    m = (pMonth + term[tm]) % 12;
    d = pDay - 1;
    if (m === 0) {
      y -= 1;
      m = 12;
    }
    if (d === 0) {
      m -= 1;
      d = 28;
    }
    let result = parseInt(
      y + `${m < 10 ? "0" + m : m}` + `${d < 10 ? "0" + d : d}`
    );
    if (result < parseInt(today.replaceAll(".", ""))) answer.push(idx + 1);
  });
  return answer;
}

구현 로직

문자열로 되어있는 terms 값에 접근이 쉽도록 객체로 만들어 넣어둡니다.

privacies를 순회하면서 들어있는 날짜를 년, 달, 일로 구분해주고 년도와 달에는 term값을 더해줍니다. 년도는 12로 나눈 몫, 달은 12로 나눈 나머지로 값을 조정해주고 일은 1만 빼주면 됩니다. 달과 일이 0으로 되는 경우 이전 년도와 달로 바꾸기 위해 조건을 넣어준 후 최종 결과를 오늘 날짜와 비교하여 날짜가 지난 p의 현재 index + 1을 정답 배열에 넣습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.