๐ ๋ฌธ์
์นด์นด์ค์ ์
์ฌํ ์ ์
๊ฐ๋ฐ์ ๋ค์ค๋ "์นด์นด์ค๊ณ์ ๊ฐ๋ฐํ"์ ๋ฐฐ์น๋์ด, ์นด์นด์ค ์๋น์ค์ ๊ฐ์
ํ๋ ์ ์ ๋ค์ ์์ด๋๋ฅผ ์์ฑํ๋ ์
๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. "๋ค์ค"์๊ฒ ์ฃผ์ด์ง ์ฒซ ์
๋ฌด๋ ์๋ก ๊ฐ์
ํ๋ ์ ์ ๋ค์ด ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์
๋ ฅํ์ ๋, ์
๋ ฅ๋ ์์ด๋์ ์ ์ฌํ๋ฉด์ ๊ท์น์ ๋ง๋ ์์ด๋๋ฅผ ์ถ์ฒํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ์
๋๋ค.
๋ค์์ ์นด์นด์ค ์์ด๋์ ๊ท์น์
๋๋ค.
์์ด๋์ ๊ธธ์ด๋ 3์ ์ด์ 15์ ์ดํ์ฌ์ผ ํฉ๋๋ค.
์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.) ๋ฌธ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จ, ๋ง์นจํ(.)๋ ์ฒ์๊ณผ ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ํ ์ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
"๋ค์ค"๋ ๋ค์๊ณผ ๊ฐ์ด 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 ๊ฐ์ด "...!@BaT#*..y.abcdefghijklm" ๋ผ๋ฉด, ์ 7๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ณ ๋๋ฉด new_id๋ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
1๋จ๊ณ ๋๋ฌธ์ 'B'์ 'T'๊ฐ ์๋ฌธ์ 'b'์ 't'๋ก ๋ฐ๋์์ต๋๋ค.
"...!@BaT#*..y.abcdefghijklm" → "...!@bat#*..y.abcdefghijklm"
2๋จ๊ณ '!', '@', '#', '*' ๋ฌธ์๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
"...!@bat#*..y.abcdefghijklm" → "...bat..y.abcdefghijklm"
3๋จ๊ณ '...'์ '..' ๊ฐ '.'๋ก ๋ฐ๋์์ต๋๋ค.
"...bat..y.abcdefghijklm" → ".bat.y.abcdefghijklm"
4๋จ๊ณ ์์ด๋์ ์ฒ์์ ์์นํ '.'๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
".bat.y.abcdefghijklm" → "bat.y.abcdefghijklm"
5๋จ๊ณ ์์ด๋๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๋ฏ๋ก ๋ณํ๊ฐ ์์ต๋๋ค.
"bat.y.abcdefghijklm" → "bat.y.abcdefghijklm"
6๋จ๊ณ ์์ด๋์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฏ๋ก, ์ฒ์ 15์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ด ์ ๊ฑฐ๋์์ต๋๋ค.
"bat.y.abcdefghijklm" → "bat.y.abcdefghi"
7๋จ๊ณ ์์ด๋์ ๊ธธ์ด๊ฐ 2์ ์ดํ๊ฐ ์๋๋ฏ๋ก ๋ณํ๊ฐ ์์ต๋๋ค.
"bat.y.abcdefghi" → "bat.y.abcdefghi"
๋ฐ๋ผ์ ์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ new_id๊ฐ "...!@BaT#*..y.abcdefghijklm"์ผ ๋, ๋ค์ค์ ํ๋ก๊ทธ๋จ์ด ์ถ์ฒํ๋ ์๋ก์ด ์์ด๋๋ "bat.y.abcdefghi" ์
๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์ ๋ ฅํ ์์ด๋๋ฅผ ๋ํ๋ด๋ new_id๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, "๋ค์ค"๊ฐ ์ค๊ณํ 7๋จ๊ณ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น ํ์ ์ถ์ฒ ์์ด๋๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๐ ์ ํ์ฌํญ
- new_id๋ ๊ธธ์ด 1 ์ด์ 1,000 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
- new_id๋ ์ํ๋ฒณ ๋๋ฌธ์, ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ํน์๋ฌธ์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- new_id์ ๋ํ๋ ์ ์๋ ํน์๋ฌธ์๋ -_.~!@#$%^&*()=+[{]}:?,<>/ ๋ก ํ์ ๋ฉ๋๋ค.
๐ ์ ์ถ๋ ฅ ์
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"
๐ ์ ์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์ #2
7๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๋์ new_id๊ฐ ๋ณํํ๋ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
1๋จ๊ณ ๋ณํ ์์ต๋๋ค.
2๋จ๊ณ "z-+.^." → "z-.."
3๋จ๊ณ "z-.." → "z-."
4๋จ๊ณ "z-." → "z-"
5๋จ๊ณ ๋ณํ ์์ต๋๋ค.
6๋จ๊ณ ๋ณํ ์์ต๋๋ค.
7๋จ๊ณ "z-" → "z--"
์
์ถ๋ ฅ ์ #3
7๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๋์ new_id๊ฐ ๋ณํํ๋ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
1๋จ๊ณ ๋ณํ ์์ต๋๋ค.
2๋จ๊ณ "=.=" → "."
3๋จ๊ณ ๋ณํ ์์ต๋๋ค.
4๋จ๊ณ "." → "" (new_id๊ฐ ๋น ๋ฌธ์์ด์ด ๋์์ต๋๋ค.)
5๋จ๊ณ "" → "a"
6๋จ๊ณ ๋ณํ ์์ต๋๋ค.
7๋จ๊ณ "a" → "aaa"
์
์ถ๋ ฅ ์ #4
1๋จ๊ณ์์ 7๋จ๊ณ๊น์ง ๊ฑฐ์น๋ ๋์ new_id("123_.def")๋ ๋ณํ์ง ์์ต๋๋ค. ์ฆ, new_id๊ฐ ์ฒ์๋ถํฐ ์นด์นด์ค์ ์์ด๋ ๊ท์น์ ๋ง์ต๋๋ค.
์
์ถ๋ ฅ ์ #5
1๋จ๊ณ ๋ณํ ์์ต๋๋ค.
2๋จ๊ณ ๋ณํ ์์ต๋๋ค.
3๋จ๊ณ ๋ณํ ์์ต๋๋ค.
4๋จ๊ณ ๋ณํ ์์ต๋๋ค.
5๋จ๊ณ ๋ณํ ์์ต๋๋ค.
6๋จ๊ณ "abcdefghijklmn.p" → "abcdefghijklmn." → "abcdefghijklmn"
7๋จ๊ณ ๋ณํ ์์ต๋๋ค.
๐ง ํ์ด
function solution(new_id) {
let filterList = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "-", "_", "."];
let answer = new_id;
// 1๋จ๊ณ: ์๋ฌธ์ ์นํ
answer = answer.toLowerCase();
// 2๋จ๊ณ: ๊ธฐํ ๋ฌธ์ ์ ๊ฑฐ
answer = answer.split("").filter((e) => filterList.includes(e)).join("");
// 3๋จ๊ณ: ํ๋์ ๋ง์นจํ๋ก ์นํ
let result = [];
for (let i = 0; i < answer.length; i++) {
if (!(answer[i] === "." && result[result.length - 1] === ".")) {
result.push(answer[i]);
}
}
answer = result.join("");
// 4๋จ๊ณ: ์ฒ์, ๋์ ๋ง์นจํ ์ ๊ฑฐ
if (answer.startsWith(".")) {
answer = answer.slice(1);
}
if (answer.endsWith(".")) {
answer = answer.slice(0, -1);
}
// 5๋จ๊ณ: ๋น ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ, "a" ์ถ๊ฐ
if (answer.length === 0) {
answer = "a";
}
// 6๋จ๊ณ: ๋ฌธ์ ๊ธธ์ด ์ ํ ๋ฐ ๋ง์ง๋ง ๋ง์นจํ ์ ๊ฑฐ
if (answer.length >= 16) {
answer = answer.slice(0, 15);
if (answer.endsWith(".")) {
answer = answer.slice(0, -1);
}
}
// 7๋จ๊ณ. ๋ฌธ์ ๊ธธ์ด 3์ผ๋ก ์ ํ
while (answer.length < 3) {
answer += answer[answer.length - 1];
}
return answer;
}
๐ก ์๊ฒ ๋ ์
- ์ ๊ทํํ์์ ์ฌ์ฉํ๋ฉด, ๋ฌธ์ ๋ฅผ ๋ถ๋ช ์ฝ๊ฒ ํ ์ ์์ ๊ฒ์ด์ง๋ง, ์ ๊ทํํ์์ด ๊ธฐ์ต์ด ๋์ง ์์์, ๋ง์ฝ ์ค์ ์์๋ ๊ทธ๋ฐ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ง๊ณ ์๋ ์ญ๋์ผ๋ก ํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
- Array.includes(): ๋ฐฐ์ด์ ํน์ ๋ฌธ์์ด์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ฌป๋ ํจ์์ด๋ค.
- ๋์ , Array.indexOf()๋ฅผ ํ์ฉํ์ฌ, -1์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ๋ ์์ ์ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ด์ฌ๊ณผ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ์์ ์ธ๋ฑ์ค (array[-1])๋ฅผ ์ง์ํ์ง ์๋๋ค.
- String.startsWith()์ String.endsWith()๋ฅผ ํ์ฉํ์ฌ, ๋งจ ์๊ณผ ๋์ ๋ฌธ์๊ฐ ๋ฌด์์ธ์ง ํ์ธํ ์ ์๋ค.
- ๋ฌธ์์ด์ ์๋ฅด๋ ๊ฒ์ slice()์ substring()์ ํ์ฉํ ์ ์์ ๊ฒ์ด๋ค.
- slice()๋ ์์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ง๋ง, substring()์ ํ์ฉํ์ง ์๋๋ค.
- ๋ฌธ์์ด์ ๋ฌธ์์ด์ ๋ํ๋ ๊ฒ์ '+' ์ฐ์ฐ์๋ก ๊ฐ๋จํ๊ฒ ๊ฐ๋ฅํ๋ค.
๐งฉ ์ ๊ทํํ์
function solution(new_id) {
const answer = new_id
.toLowerCase() // 1
.replace(/[^\w-_.]/g, '') // 2
.replace(/\.+/g, '.') // 3
.replace(/^\.|\.$/g, '') // 4
.replace(/^$/, 'a') // 5
.slice(0, 15).replace(/\.$/, ''); // 6
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
- ๋ฌธ์์ ์ซ์
- ๋จ์ผ ๋ฌธ์๋ ์ซ์๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- ์: a, b, 1, 2
- ๋ฉํ๋ฌธ์
- ํน์ ์๋ฏธ๋ฅผ ๊ฐ์ง ํน๋ณํ ๋ฌธ์๋ค์ ๋๋ค.
- .: ๋ชจ๋ ๋จ์ผ ๋ฌธ์
- ^: ๋ฌธ์์ด์ ์์
- $: ๋ฌธ์์ด์ ๋
- *: 0ํ ์ด์ ๋ฐ๋ณต
- +: 1ํ ์ด์ ๋ฐ๋ณต
- ?: 0ํ ๋๋ 1ํ ๋ฐ๋ณต
- \: ์ด์ค์ผ์ดํ ๋ฌธ์๋ก, ๋ฉํ๋ฌธ์ ์์ฒด๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- []: ๋ฌธ์ ํด๋์ค. ๋๊ดํธ ์์ ์๋ ๋ฌธ์ ์ค ํ๋์ ์ผ์น
- |: OR ์ฐ์ฐ์
- (): ๊ทธ๋ฃนํ. ํ์ ํํ์์ ๋ํด ์บก์ฒ
- ๋ฌธ์ ํด๋์ค
- [abc]: 'a', 'b', 'c' ์ค ํ๋
- [^abc]: 'a', 'b', 'c'๋ฅผ ์ ์ธํ ๋ฌธ์
- [a-z]: 'a'๋ถํฐ 'z'๊น์ง์ ๋ชจ๋ ์๋ฌธ์
- [A-Z]: 'A'๋ถํฐ 'Z'๊น์ง์ ๋ชจ๋ ๋๋ฌธ์
- [0-9]: ๋ชจ๋ ์ซ์
- ์๋์
- *: 0ํ ์ด์ ๋ฐ๋ณต
- +: 1ํ ์ด์ ๋ฐ๋ณต
- ?: 0ํ ๋๋ 1ํ
- {n}: ์ ํํ nํ ๋ฐ๋ณต
- {n,}: nํ ์ด์ ๋ฐ๋ณต
- {n,m}: nํ ์ด์ mํ ์ดํ ๋ฐ๋ณต
- ์์ฃผ ์ฌ์ฉํ๋ ํจํด
- \d: ์ซ์ (0-9์ ๋์ผ)
- \D: ์ซ์๊ฐ ์๋ ๊ฒ
- \w: ๋จ์ด ๋ฌธ์ (์ํ๋ฒณ + ์ซ์ + ๋ฐ์ค)
- \W: ๋จ์ด ๋ฌธ์๊ฐ ์๋ ๊ฒ
- \s: ๊ณต๋ฐฑ ๋ฌธ์ (์คํ์ด์ค, ํญ ๋ฑ)
- \S: ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์๋ ๊ฒ
- ๊ธฐ๋ณธ ๋ฌธ์ ์ฐพ๊ธฐ
- cat: 'cat'๊ณผ ์ผ์น
- 123: '123'๊ณผ ์ผ์น
- ๋ฌธ์ ํด๋์ค ์ฌ์ฉ
- [abc]: 'a', 'b', 'c' ์ค ํ๋
- [a-z]: ๋ชจ๋ ์๋ฌธ์
- [0-9]: ๋ชจ๋ ์ซ์
- ๋ฉํ๋ฌธ์ ์ฌ์ฉ
- .: ์์์ ํ ๋ฌธ์ (๊ฐํ ์ ์ธ)
- ^a: 'a'๋ก ์์ํ๋ ๋ฌธ์์ด
- z$: 'z'๋ก ๋๋๋ ๋ฌธ์์ด
- ์๋์ ์ฌ์ฉ
- a*: 'a'๊ฐ 0ํ ์ด์ ๋ฐ๋ณต
- a+: 'a'๊ฐ 1ํ ์ด์ ๋ฐ๋ณต
- a?: 'a'๊ฐ 0ํ ๋๋ 1ํ ์กด์ฌ
- a{2}: 'a'๊ฐ ์ ํํ 2ํ ๋ฐ๋ณต
- a{2,}: 'a'๊ฐ 2ํ ์ด์ ๋ฐ๋ณต
- a{2,4}: 'a'๊ฐ 2ํ ์ด์ 4ํ ์ดํ ๋ฐ๋ณต
- ๋ณต์กํ ํจํด
- \d{3}-\d{2}-\d{4}: ํ์ '123-45-6789'์ ์ซ์
- (abc|def): 'abc' ๋๋ 'def'