프로그래머스 개인정보 수집 유효기간

버건디·2023년 6월 25일
0

프로그래머스

목록 보기
53/66
post-thumbnail

문제 링크


- 내 풀이

function solution(today, terms, privacies) {
  let answer = [];

  // 모든 달엔 28일까지 밖에 없으니 1년에 336일
  let splitToday = today.split(".");

  // 현재 총 날짜
  let totalToday = 0;

  // 현재 총 날짜 구하기
  for (let i = 0; i < splitToday.length; i++) {
    if (i === 0) {
      totalToday += Number(splitToday[i]) * 336;
    } else if (i === 1) {
      totalToday += Number(splitToday[i]) * 28;
    } else if (i === 2) {
      totalToday += Number(splitToday[i]);
    }
  }

  let termObj = {};

  // 개인정보 약관 마다 유효기관 객체로 보관
  for (let i = 0; i < terms.length; i++) {
    let [type, num] = [terms[i].split(" ")[0], Number(terms[i].split(" ")[1])];
    let totalDay = num * 28;
    termObj[type] = totalDay;
  }

  // 개인정보 수집 일자 반복문 돌기
  for (let i = 0; i < privacies.length; i++) {
    let totalDay = 0;
    let [yearAndMonthAndDay, type] = privacies[i].split(" ");

    let [year, month, day] = yearAndMonthAndDay
      .split(".")
      .map((str) => Number(str));

    totalDay += year * 336;
    totalDay += month * 28;
    totalDay += day;
    totalDay += termObj[type];

    // 총 날짜에서 -1을 해주어야지 보관 가능한 날짜를 구함
    if (totalToday > totalDay - 1) {
      answer.push(i + 1);
    }
  }

  return answer;
}

이런 날짜나 시간 문제에서는 차라리 모든 범위로 값들을 합쳐준 후, 거기서 값 비교를 해주는것이 깔끔하다는 생각이 들었다. 분과 초가 나뉘어질땐 초로 합쳐주기, 달과 일로 나뉘어질때, 일로 합쳐주기 등

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글

관련 채용 정보