Jieunny์ ๋ธ๋ก๊ทธ
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ๊ฐ์ธ์ ๋ณด ์์ง ์ ํจ๊ธฐ๊ฐ ๋ณธ๋ฌธ
[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;
}
'Study > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ๊ฒน์น๋ ์ ๋ถ์ ๊ธธ์ด (0) | 2023.02.03 |
---|---|
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ๋๋ง์ ์ํธ (0) | 2023.02.02 |
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2023.02.02 |
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ํ๋ฒ๊ฑฐ ๋ง๋ค๊ธฐ (0) | 2023.02.02 |
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌํ๊ธฐ (2) | 2023.02.02 |