[콭] 개인정보 수집 유효기간 : 객체 저장, 두 자릿수

강원지·2023년 2월 1일
0

코테 다시보기

목록 보기
10/22

코딩테스트 연습
2023 KAKAO BLIND RECRUITMENT
개인정보 수집 유효기간

문제

개인정보 수집 유효기간이 지났는지 확인하라.

로직

  1. 유효기간을 검색하기 쉽게 객체에 저장함.
  2. 고객 별 개인정보 수집일자를 계산하기 쉬운 형태로 바꾸고 고객이 설장한 유효기간(n month)을 더함. 달 += n, 일-=1
    -1. 일이 바뀌는 경우 (일===0) : 달--,일=28
    -2. 년이 바뀌는 경우 (n>=12일 때) : 달에 n이 더해진 상태이므로 12를 나눠준 나머지를 구하기 위해 12의 최대배수를 빼줌. 해에는 년수를 더해줌.
    -3. 둘 다 바뀌는 경우 (ex 1월 1일 + 12달) : 12월 28일로 고정.
    -4. 구한 date을 string으로 변환
  3. date가 today보다 크거나 같다면 유효기간이 지났으므로 개인정보 번호를 저장함.

javascript 코드

function solution(today, terms, privacies) {
  var answer = [];
    
  //obj에 약관 저장
  let obj = {};
  for (let elem of terms) {
    let t = elem.split(" ");
    obj[t[0]] = t[1] * 1;
  }

  let num = 0;
  for (let elem of privacies) {
    let p = elem.split(" ");
    let month = obj[p[1]];//약관에 따른 유효기간
    let [y, m, d] = p[0].split(".");//구조분해할당으로 연월일 저장
      
    //연월일 string->number 변환
    y *= 1;
    m *= 1;
    d *= 1;
      
    //유효기간 계산
    m += month;
    d -= 1;
    if (d === 0) {
      d = 28;
      m--;
    }
    if (m > 12) {
      y += Math.floor((m-1) / 12);
      m -= Math.floor((m-1) / 12) * 12;
    }
    if (d === 0 && m === 13) {
      d = 28;
      m = 12;
    }
    num++;
      
    //2자리수 만들기
    m = ("00" + m).slice(-2);
    d = ("00" + d).slice(-2);
      
    //유효기간이 지났다면 개인정보의 번호 저장
    if (`${y}.${m}.${d}` < today) answer.push(num);
  }

  return answer;
}
solution("2019.01.01", ["B 12"], ["2017.12.21 B"]);

더 나은 풀이

여러 조건문을 통해 날짜를 구하는 것보다 전체 일수를 구하여 비교하는 것이 더 안정적임. 조건에서 28일로 통일한 것이 이런 이유에서 였을까.

function solution(today, terms, privacies) {
  var answer = [];
  var [year, month, date] = today.split(".").map(Number);
  var todates = year * 12 * 28 + month * 28 + date;
  var t = {};
  terms.forEach((e) => {
    let [a, b] = e.split(" ");
    t[a] = Number(b);
  });
  privacies.forEach((e, i) => {
    var [day, term] = e.split(" ");
    day = day.split(".").map(Number);
    var dates = day[0] * 12 * 28 + day[1] * 28 + day[2] + t[term] * 28;
    if (dates <= todates) answer.push(i + 1);
  });
  return answer;
}

참고할 부분

  1. 형변환
let [y, m, d] = p[0].split(".");
   
//암묵적 형 변환
y *= 1;
m *= 1;
d *= 1;

위의 코드를 한 줄로 줄일 수 있음.

var [year, month, date] = today.split(".").map(Number);
  1. 객체 프로퍼티 저장,삭제
  let obj = {};
  obj[color]="black";
  obj.weather="cloudy";

  delete obj.color;

//ES6
  var x=1,y=2;
  var obj={x,y};


0개의 댓글