[ ๐—ฝ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ฒ๐—ฟ๐˜€ ] ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ - ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ์ •๊ทœํ‘œํ˜„์‹ | JavaScript

NewHaยท2025๋…„ 5์›” 2์ผ
0
post-thumbnail

๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.1 - 2021 KAKAO BLIND RECRUITMETN ์‹ ๊ทœ์•„์ด๋”” ์ถ”์ฒœ

์นด์นด์˜ค์— ์ž…์‚ฌํ•œ ์‹ ์ž… ๊ฐœ๋ฐœ์žย "๋„ค์˜ค"๋Š” "์นด์นด์˜ค๊ณ„์ •๊ฐœ๋ฐœํŒ€"์— ๋ฐฐ์น˜๋˜์–ด, ์นด์นด์˜ค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๋Š” ์œ ์ €๋“ค์˜ ์•„์ด๋””๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋„ค์˜ค"์—๊ฒŒ ์ฃผ์–ด์ง„ ์ฒซ ์—…๋ฌด๋Š” ์ƒˆ๋กœ ๊ฐ€์ž…ํ•˜๋Š” ์œ ์ €๋“ค์ด ์นด์นด์˜ค ์•„์ด๋”” ๊ทœ์น™์— ๋งž์ง€ ์•Š๋Š” ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์ž…๋ ฅ๋œ ์•„์ด๋””์™€ ์œ ์‚ฌํ•˜๋ฉด์„œ ๊ทœ์น™์— ๋งž๋Š” ์•„์ด๋””๋ฅผ ์ถ”์ฒœํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์นด์นด์˜ค ์•„์ด๋””์˜ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

  • ์•„์ด๋””์˜ ๊ธธ์ด๋Š” 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๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, "๋„ค์˜ค"๊ฐ€ ์„ค๊ณ„ํ•œ 7๋‹จ๊ณ„์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„์˜ ์ถ”์ฒœ ์•„์ด๋””๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๐Ÿฅ… ์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค new_id.length(๋ฌธ์ž์—ด) โ‰ค 1,000
  • new_id๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • newid์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜๋ฌธ์ž๋Š”ย `-.~!@#$%^&*()=+[{]}:?,<>/`ย ๋กœ ํ•œ์ •๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ์ž…์ถœ๋ ฅ ์˜ˆ

nonew_idresult
์˜ˆ1"...!@BaT#*..y.abcdefghijklm""bat.y.abcdefghi"
์˜ˆ2"z-+.^.""z--"
์˜ˆ3"=.=""aaa"
์˜ˆ4"123_.def""123_.def"
์˜ˆ5"abcdefghijklmn.p""abcdefghijklmn"

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ฌธ์ œ ํ’€์ด

1๋‹จ๊ณ„

new_id์˜ ๋ชจ๋“  ๋Œ€๋ฌธ์ž๋ฅผ ๋Œ€์‘๋˜๋Š” ์†Œ๋ฌธ์ž๋กœ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

let id = new_id.toLowerCase();

2๋‹จ๊ณ„

new_id์—์„œ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๋นผ๊ธฐ(-), ๋ฐ‘์ค„(_), ๋งˆ์นจํ‘œ(.)๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋งํ•˜์ž๋ฉด, ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค.

  • filter๋ฅผ ์‚ฌ์šฉํ•  ๊ฑด๋ฐ, ๋ฌธ์ž์—ด์—๋Š” ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•([โ€ฆ])์œผ๋กœ ๋ฐฐ์—ดํ™” ํ•ด์„œ filterํ•œ ํ›„์— ๋‹ค์‹œ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์ค๋‹ˆ๋‹ค.
const ALLOWEDCHAR = 'abcdefghijklmnopqrstuvwxyz0123456789-_.';
id = [...id].filter(char => ALLOWEDCHAR.includes(char)).join('');

3๋‹จ๊ณ„

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;

4๋‹จ๊ณ„

new_id์—์„œ ๋งˆ์นจํ‘œ(.)๊ฐ€ ์ฒ˜์Œ์ด๋‚˜ ๋์— ์œ„์น˜ํ•œ๋‹ค๋ฉด ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

if (id[0] === '.') id = id.slice(1);
if (id[id.length - 1] === '.') id = id.slice(0, -1);

5๋‹จ๊ณ„

new_id๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, new_id์— "a"๋ฅผ ๋Œ€์ž…ํ•ฉ๋‹ˆ๋‹ค.

if (id === '') id = 'a';

6๋‹จ๊ณ„

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);
}

7๋‹จ๊ณ„

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;
}
profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

0๊ฐœ์˜ ๋Œ“๊ธ€