Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„ ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„

Jieunny 2023. 2. 2. 17:21

๐Ÿ“Œ  ๋ฌธ์ œ

๊ณ ๊ฐ์˜ ์•ฝ๊ด€ ๋™์˜๋ฅผ ์–ป์–ด์„œ ์ˆ˜์ง‘๋œ 1~n๋ฒˆ์œผ๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๊ฐœ์ธ์ •๋ณด n๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žˆ์œผ๋ฉฐ ๊ฐ ์•ฝ๊ด€๋งˆ๋‹ค ๊ฐœ์ธ์ •๋ณด ๋ณด๊ด€ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ฐ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์–ด๋–ค ์•ฝ๊ด€์œผ๋กœ ์ˆ˜์ง‘๋๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด๋Š” ์œ ํšจ๊ธฐ๊ฐ„ ์ „๊นŒ์ง€๋งŒ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํŒŒ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A๋ผ๋Š” ์•ฝ๊ด€์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด 12 ๋‹ฌ์ด๊ณ , 2021๋…„ 1์›” 5์ผ์— ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด๊ฐ€ A์•ฝ๊ด€์œผ๋กœ ์ˆ˜์ง‘๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐœ์ธ์ •๋ณด๋Š” 2022๋…„ 1์›” 4์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ 2022๋…„ 1์›” 5์ผ๋ถ€ํ„ฐ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด ๋ฒˆํ˜ธ๋“ค์„ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋‹ฌ์€ 28์ผ๊นŒ์ง€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ 2022.05.19์ผ ๋•Œ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์•ฝ๊ด€ ์ข…๋ฅ˜์œ ํšจ๊ธฐ๊ฐ„

A 6 ๋‹ฌ
B 12 ๋‹ฌ
C 3 ๋‹ฌ

๋ฒˆํ˜ธ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์ผ์ž์•ฝ๊ด€ ์ข…๋ฅ˜

1 2021.05.02 A
2 2021.07.01 B
3 2022.02.19 C
4 2022.02.20 C
  • ์ฒซ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” A์•ฝ๊ด€์— ์˜ํ•ด 2021๋…„ 11์›” 1์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” B์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 6์›” 28์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์•„์ง ๋ณด๊ด€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” C์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 5์›” 18์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” C์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 5์›” 19์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์•„์ง ๋ณด๊ด€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด ๋ฒˆํ˜ธ๋Š” [1, 3]์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฌธ์ž์—ด today, ์•ฝ๊ด€์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด terms์™€ ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด privacies๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์˜ ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • today๋Š” "YYYY.MM.DD" ํ˜•ํƒœ๋กœ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 1 ≤ terms์˜ ๊ธธ์ด ≤ 20
    • terms์˜ ์›์†Œ๋Š” "์•ฝ๊ด€ ์ข…๋ฅ˜ ์œ ํšจ๊ธฐ๊ฐ„" ํ˜•ํƒœ์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜์™€ ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” A~Z์ค‘ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž ํ•˜๋‚˜์ด๋ฉฐ, terms ๋ฐฐ์—ด์—์„œ ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์œ ํšจ๊ธฐ๊ฐ„์€ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ฌ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜์ด๋ฉฐ, 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • 1 ≤ privacies์˜ ๊ธธ์ด ≤ 100
    • privacies[i]๋Š” i+1๋ฒˆ ๊ฐœ์ธ์ •๋ณด์˜ ์ˆ˜์ง‘ ์ผ์ž์™€ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • privacies์˜ ์›์†Œ๋Š” "๋‚ ์งœ ์•ฝ๊ด€ ์ข…๋ฅ˜" ํ˜•ํƒœ์˜ ๋‚ ์งœ์™€ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๋‚ ์งœ๋Š” "YYYY.MM.DD" ํ˜•ํƒœ์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์ˆ˜์ง‘๋œ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, today ์ด์ „์˜ ๋‚ ์งœ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
    • privacies์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ํ•ญ์ƒ terms์— ๋‚˜ํƒ€๋‚œ ์•ฝ๊ด€ ์ข…๋ฅ˜๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • today์™€ privacies์— ๋“ฑ์žฅํ•˜๋Š” ๋‚ ์งœ์˜ YYYY๋Š” ์—ฐ๋„, MM์€ ์›”, DD๋Š” ์ผ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ (.) ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • 2000 ≤ YYYY ≤ 2022
    • 1 ≤ MM ≤ 12
    • MM์ด ํ•œ ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ ์•ž์— 0์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
    • 1 ≤ DD ≤ 28
    • DD๊ฐ€ ํ•œ ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ ์•ž์— 0์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
  • ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

 

๐Ÿ’ก  ์•„์ด๋””์–ด

์ฃผ์–ด์ง„ ๋ฐฐ์—ด๋“ค์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐ๊ฐ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์„œ Number()๋กœ ๋ฐ”๊พธ์–ด์„œ ๋„ฃ์–ด์ค€๋‹ค.

(key๋ฅผ index ๋ฒˆํ˜ธ๋กœ ํ•ด์ฃผ๊ธฐ)

์ •๋ณด ์ˆ˜์ง‘ ์ผ์ž์— ์œ ํšจ๊ธฐ๊ฐ„์„ ๋”ํ•ด์ฃผ๋Š”๋ฐ, month๊ฐ€ 12๋ณด๋‹ค ํฌ๋ฉด ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๋ฅผ ์ด์šฉํ•ด์„œ ๋…„๋„์™€ ์›”์„ ๊ตฌํ•ด์ค€๋‹ค.

(์ด๋•Œ, ์ˆ˜์ง‘ ์ผ์ž๊ฐ€ 2019.12.02, ์œ ํšจ๊ธฐ๊ฐ„์ด 12๋‹ฌ ์ผ๋•Œ, 1๋…„๋งŒ ์ง€๋‚˜์•ผ ํ•˜๋Š”๋ฐ ๋…„๋„๊ฐ€ 2๋…„์ด ์ง€๋‚˜๊ณ  ์›”์ด 0์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๊ฒฝ์šฐ๋Š” ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•œ๋‹ค.) -> ์ด๊ฑฐ ๋•Œ๋ฌธ์— 17๋ฒˆ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋งŒ ์—๋Ÿฌ๋‚ฌ์—ˆ๋‹ค.

ํ˜„์žฌ ๋‚ ์งœ๋ž‘ ์œ ํšจ๊ธฐ๊ฐ„์ด๋ž‘ ๋น„๊ตํ•ด์„œ ์ง€๋‚˜๊ฐ„ ์•ฝ๊ด€๋งŒ answer์— key๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

(key๋Š” string์—๋‹ค๊ฐ€ 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ Number()๋กœ ๋ฐ”๊พธ๊ณ  1 ๋”ํ•ด์ฃผ๊ธฐ)

 

โœ๏ธ  ํ’€์ด

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

  const term = {};
  const myPrivacies = {};
  const passedPrivacies = {};
  let todayNum = [];

  let temp = today.split('.');  // ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์ˆซ์ž ๋ฐฐ์—ด๋กœ ๋„ฃ์–ด์ค€๋‹ค.
  for(let i of temp){
    todayNum.push(Number(i));
  }

  for(let i of terms){  // ์ •๋ณด์™€ ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ฐ์ฒด์— ์ˆซ์ž๋กœ ๋„ฃ์–ด์ค€๋‹ค.
    let temp = i.split(' ');
    term[temp[0]] = Number(temp[1]);
  }

  for(let i in privacies){  // ์•ฝ๊ด€์˜ ์ธ๋ฑ์Šค, ์ˆ˜์ง‘์ผ์ž, ์ข…๋ฅ˜๋ฅผ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์„œ ๋„ฃ์–ด์ค€๋‹ค.
    let temp = privacies[i].split(' ');
    let days = temp[0].split('.');
    let year = days[0];
    let month = days[1];
    let day = days[2];
    myPrivacies[i] = [Number(year)];
    myPrivacies[i].push(Number(month));
    myPrivacies[i].push(Number(day));
    myPrivacies[i].push(temp[1]);
  }

  for(let key in myPrivacies){  // ์ •๋ณด ์ˆ˜์ง‘์ผ์ž์— ์œ ํšจ๊ธฐ๊ฐ„์„ ๋”ํ•ด์„œ ๊ทธ ์ •๋ณด์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด ์–ธ์ œ๊นŒ์ง€์ธ์ง€ ๊ตฌํ•ด์„œ ์ˆซ์ž๋กœ ๋„ฃ์–ด์ค€๋‹ค.
    let month = myPrivacies[key][1] + term[myPrivacies[key][3]];

    if(month > 12){
      if(month % 12 !== 0){
        passedPrivacies[key] = [myPrivacies[key][0] + Math.floor(month / 12)];
        passedPrivacies[key].push(month % 12);
      }
      else {
        passedPrivacies[key] = [myPrivacies[key][0] + Math.floor(month / 12) - 1];
        passedPrivacies[key].push(12);
      }
      passedPrivacies[key].push(myPrivacies[key][2]);
      passedPrivacies[key].push(myPrivacies[key][3]);
    }
    else{
      passedPrivacies[key] = [myPrivacies[key][0]];
      passedPrivacies[key].push(month);
      passedPrivacies[key].push(myPrivacies[key][2]);
      passedPrivacies[key].push(myPrivacies[key][3]);
    }
  }

  for(let idx in passedPrivacies){  // ํ˜„์žฌ ๋‚ ์งœ์™€ ์œ ํšจ๊ธฐ๊ฐ„ ๋น„๊ตํ•˜๊ธฐ
    if(passedPrivacies[idx][0] < todayNum[0]){  // ๋…„๋„๊ฐ€ ์ง€๋‚ฌ์œผ๋ฉด ํŒŒ๊ธฐ
      answer.push(Number(idx) + 1);
    }
    else if(passedPrivacies[idx][0] === todayNum[0]){ // ๋…„๋„๊ฐ€ ๊ฐ™์œผ๋ฉด 
      if(passedPrivacies[idx][1] < todayNum[1]){  // ์›”์ด ์ง€๋‚ฌ์œผ๋ฉด ํŒŒ๊ธฐ
        answer.push(Number(idx) + 1);
      }
      else if(passedPrivacies[idx][1] === todayNum[1]){ // ์›”์ด ๊ฐ™์œผ๋ฉด
        if(passedPrivacies[idx][2] <= todayNum[2]){ // ์ผ์ˆ˜๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด ํŒŒ๊ธฐ
          answer.push(Number(idx) + 1);
        }
      }
    }
  }

  return answer;
}