
์นด์นด์ค์ ์ ์ฌํ ์ ์ ๊ฐ๋ฐ์ย "๋ค์ค"๋ "์นด์นด์ค๊ณ์ ๊ฐ๋ฐํ"์ ๋ฐฐ์น๋์ด, ์นด์นด์ค ์๋น์ค์ ๊ฐ์ ํ๋ ์ ์ ๋ค์ ์์ด๋๋ฅผ ์์ฑํ๋ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. "๋ค์ค"์๊ฒ ์ฃผ์ด์ง ์ฒซ ์ ๋ฌด๋ ์๋ก ๊ฐ์ ํ๋ ์ ์ ๋ค์ด ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์ ๋ ฅํ์ ๋, ์ ๋ ฅ๋ ์์ด๋์ ์ ์ฌํ๋ฉด์ ๊ท์น์ ๋ง๋ ์์ด๋๋ฅผ ์ถ์ฒํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์นด์นด์ค ์์ด๋์ ๊ท์น์ ๋๋ค.
_), ๋ง์นจํ(.) ๋ฌธ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค..)๋ ์ฒ์๊ณผ ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ํ ์ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค."๋ค์ค"๋ ๋ค์๊ณผ ๊ฐ์ด 7๋จ๊ณ์ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ์ ๊ท ์ ์ ๊ฐ ์ ๋ ฅํ ์์ด๋๊ฐ ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง๋ ์ง ๊ฒ์ฌํ๊ณ ๊ท์น์ ๋ง์ง ์์ ๊ฒฝ์ฐ ๊ท์น์ ๋ง๋ ์๋ก์ด ์์ด๋๋ฅผ ์ถ์ฒํด ์ฃผ๋ ค๊ณ ํฉ๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๊ฐย new_idย ๋ผ๊ณ ํ๋ค๋ฉด,
1๋จ๊ณ new_id์ ๋ชจ๋ ๋๋ฌธ์๋ฅผ ๋์๋๋ ์๋ฌธ์๋ก ์นํํฉ๋๋ค.
2๋จ๊ณ new_id์์ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.)๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
3๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ์ฐ์๋ ๋ถ๋ถ์ ํ๋์ ๋ง์นจํ(.)๋ก ์นํํฉ๋๋ค.
4๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํฉ๋๋ค.
5๋จ๊ณ new_id๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, new_id์ "a"๋ฅผ ๋์
ํฉ๋๋ค.
6๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด, new_id์ ์ฒซ 15๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค.
๋ง์ฝ ์ ๊ฑฐ ํ ๋ง์นจํ(.)๊ฐ new_id์ ๋์ ์์นํ๋ค๋ฉด ๋์ ์์นํ ๋ง์นจํ(.) ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
7๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, new_id์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ new_id์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์
๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๋ฅผ ๋ํ๋ด๋ new_id๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, "๋ค์ค"๊ฐ ์ค๊ณํ 7๋จ๊ณ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น ํ์ ์ถ์ฒ ์์ด๋๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
| no | new_id | result |
|---|---|---|
| ์1 | "...!@BaT#*..y.abcdefghijklm" | "bat.y.abcdefghi" |
| ์2 | "z-+.^." | "z--" |
| ์3 | "=.=" | "aaa" |
| ์4 | "123_.def" | "123_.def" |
| ์5 | "abcdefghijklmn.p" | "abcdefghijklmn" |
new_id์ ๋ชจ๋ ๋๋ฌธ์๋ฅผ ๋์๋๋ ์๋ฌธ์๋ก ์นํํฉ๋๋ค.
let id = new_id.toLowerCase();
new_id์์ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.)๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ฅผ ๋ฐ๋๋ก ๋งํ์๋ฉด, ํ์ฉ๋๋ ๋ฌธ์๋ง ๋จ๊น๋๋ค.
filter๋ฅผ ์ฌ์ฉํ ๊ฑด๋ฐ, ๋ฌธ์์ด์๋ ์ง์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์คํ๋ ๋ ๋ฌธ๋ฒ([โฆ])์ผ๋ก ๋ฐฐ์ดํ ํด์ filterํ ํ์ ๋ค์ ๋ฌธ์์ด๋ก ํฉ์ณ์ค๋๋ค.const ALLOWEDCHAR = 'abcdefghijklmnopqrstuvwxyz0123456789-_.';
id = [...id].filter(char => ALLOWEDCHAR.includes(char)).join('');
new_id์์ ๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ์ฐ์๋ ๋ถ๋ถ์ ํ๋์ ๋ง์นจํ(.)๋ก ์นํํฉ๋๋ค.
let collapsed = '';
for (let i = 0; i < id.length; i++) {
if (!(id[i] === '.' && collapsed[collapsed.length - 1] === '.')) {
collapsed += id[i];
}
}
id = collapsed;
new_id์์ ๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํฉ๋๋ค.
if (id[0] === '.') id = id.slice(1);
if (id[id.length - 1] === '.') id = id.slice(0, -1);
new_id๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, new_id์ "a"๋ฅผ ๋์
ํฉ๋๋ค.
if (id === '') id = 'a';
new_id์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด, new_id์ ์ฒซ 15๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค. ๋ง์ฝ ์ ๊ฑฐ ํ ๋ง์นจํ(.)๊ฐ new_id์ ๋์ ์์นํ๋ค๋ฉด ๋์ ์์นํ ๋ง์นจํ(.) ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
if (id.length >= 16) {
id = id.slice(0, 15);
if (id[id.length - 1] === '.') id = id.slice(0, -1);
}
new_id์ ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, new_id์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ new_id์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์
๋๋ค.
while (id.length < 3) {
id += id[id.length - 1];
}
๋จ๊ณ๋ณ๋ก ๊ตฌํ์ ํ์ง๋ง ๋ฐ๋ณต๋ฌธ์ด ๋ง์ต๋๋ค. 2, 3, 4, 7๋จ๊ณ์์ ์ด 4๋ฒ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ํํ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
ํ ๋ฒ ์ํํ๋ฉด์ ์๋ฌธ์ํํ๊ณ , ํ์ฉ ๋ฌธ์๋ง ๋จ๊ธฐ๊ณ , ๋ง์นจํ ์ฐ์์ ์นํํ์ฌ 1~3 ๋จ๊ณ๋ฅผ ํฉ์น๊ฒ ์ต๋๋ค.
let id = '';
const allowed = 'abcdefghijklmnopqrstuvwxyz0123456789-_.';
let prevChar = ''; // ์ด์ ๋ฌธ์๋ฅผ ๊ธฐ์ตํด์ ์ฐ์ ๋ง์นจํ ์ฒดํฌ
for (let c of new_id.toLowerCase()) {
if (!allowed.includes(c)) continue;
if (c === '.' && prevChar === '.') continue;
id += c;
prevChar = c;
}
๋, ๋ง์ง๋ง ๋ง์นจํ๋ ์ธ์ ๊ฐ ๋์๋ ์ ๊ฑฐํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ 15๊ธ์๋ก ์๋ฅธ ํ์ ๋ง์ง๋ง ๊ธ์๊ฐ ๋ง์นจํ์ธ ๊ฒฝ์ฐ์ ์ ๊ฑฐํ๋๋ก ํ์ฌ ํ๋ฒ๋ง ์ํํ๋๋ก ์์๋ฅผ ๋ฐ๊ฟ๋๋ค.
function solution(new_id) {
let id = '';
const allowed = 'abcdefghijklmnopqrstuvwxyz0123456789-_.';
let prevChar = '';
for (let c of new_id.toLowerCase()) {
if (!allowed.includes(c)) continue;
if (c === '.' && prevChar === '.') continue;
id += c;
prevChar = c;
}
if (id[0] === '.') id = id.slice(1);
if (id === '') id = 'a';
if (id.length >= 16) {
id = id.slice(0, 15);
}
if (id[id.length - 1] === '.') id = id.slice(0, -1);
while (id.length < 3) {
id += id[id.length - 1];
}
return id;
}
2๋จ๊ณ, 3๋จ๊ณ, 4๋จ๊ณ์ ๊ฒฝ์ฐ์๋ ์ ๊ทํํ์์ผ๋ก ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ต๋๋ค.
function solution(new_id) {
let id = new_id
.toLowerCase()
.replace(/[^a-z0-9-_.]/g, '') // 2๋จ๊ณ
.replace(/\.{2,}/g, '.') // 3๋จ๊ณ
.replace(/^\.|\.$/g, ''); // 4๋จ๊ณ
if (id === "") id = "a";
if (id.length >= 16) {
id = id.slice(0, 15);
id = id.replace(/\.$/, '');
}
while (id.length < 3) {
id += id[id.length - 1];
}
return id;
}