1. ์žฌ๊ท€ํ•จ์ˆ˜ 15๋ฒˆ

์žฌ๊ท€ํ•จ์ˆ˜ ๋ฌธ์ œ :

๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ด

  • ์ฃผ์˜์‚ฌํ•ญ :
  1. ๋ฐฐ์—ด์„ ๋ฆฌํ„ด
  2. immutability
  • ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ
let output = flattenArr([[1], 2, [3, 4], 5]);
console.log(output); // --> [1, 2, 3, 4, 5]

output = flattenArr([[2, [[3]]], 4, [[[5]]]);
console.log(output); // --> [2, 3, 4, 5]
  • pseudocode(์ˆ˜๋„์ฝ”๋“œ)
  1. 1์ฐจ์› ๋ฐฐ์—ด์„ ๋‹ด์•„์ค„ ๋นˆ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•œ๋‹ค.
  2. ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฐฐ์—ด์„ ๋Œ๋ฉฐ ๋ฐฐ์—ด์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  3. ๋ฐฐ์—ด์ผ ๊ฒฝ์šฐ ๋จผ์ € ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ• ๋‹นํ•œ๋‹ค.
  4. ๊ทธ ํ›„์— ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋ฅผ ๋นˆ ๋ฐฐ์—ด์— push ํ•œ๋‹ค. ๋‹จ, ๋ช‡์ฐจ์› ๋ฐฐ์—ด์ด ๋‚˜์˜ฌ์ง€ ๋ชจ๋ฅด๋‹ˆ spread syntax ์‚ฌ์šฉํ•œ๋‹ค.
  5. ๋ฐฐ์—ด์ด ์•„๋‹ ๊ฒฝ์šฐ ๋ฐ”๋กœ ๋นˆ ๋ฐฐ์—ด์— push ํ•œ๋‹ค.
  6. ๋นˆ ๋ฐฐ์—ด์„ ๋ฆฌํ„ด(๋ฐ˜ํ™˜) ํ•œ๋‹ค.
  • code
let resultArr = [];

if (arr.length === 0) {
  return [];
}

for (let i = 0; i < arr.length; i++) {
  if (Array.isArray(arr[i])) {
    const result = flattenArr(arr[i]);
    resultArr.push(...result);
  } else {
    resultArr.push(arr[i]);
  }
}

return resultArr;

์ด ๋ฌธ์ œ๋ฅผ ๋ณต์Šตํ•˜๋ฉด์„œ spread syntax ์— ๋Œ€ํ•ด ๋‹ค์‹œ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทผ๋ฐ ์‚ฌ์‹ค ๋‚ด๊ฐ€ ์ฒ˜์Œ ํ’€์—ˆ์„ ๋•Œ๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ ํ’€์—ˆ๋‹ค.

return arr.reduce(function(acc, cur) {
  return acc.concat(Array.isArray(cur) ? flattenArr(cur) : cur);
},[]);
}

reduce ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•œ ์žฌ๊ท€ํ•จ์ˆ˜ ํ’€์ด๋ฐฉ์‹์ด๋‹ค. ๋‹ค๋ฅธ ๊ฐ๋„์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.




2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ 16๋ฒˆ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ :

๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ ์•„์ด์†Œ๊ทธ๋žจ(isogram)์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์•ŒํŒŒ๋ฒณ์„ ํ•œ๋ฒˆ์”ฉ๋งŒ ์ด์šฉํ•ด์„œ ๋งŒ๋“  ๋‹จ์–ด๋‚˜ ๋ฌธ๊ตฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์˜์‚ฌํ•ญ :
  1. ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ๋นˆ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ, true๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค.
  3. ๋นˆ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ด
  • ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ
let output = isIsogram("aba");
console.log(output); // false

output = isIsogram("Dermatoglyphics");
console.log(output); // true
  • pseudocode(์ˆ˜๋„์ฝ”๋“œ)
  1. ๋จผ์ € ๋ฌธ์ž์—ด์„ ๋Œ€๋ฌธ์ž๋กœ ๋ชจ๋‘ ๋ฐ”๊ฟ”์ค€๋‹ค.
  2. ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ๋‘๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ์€ ์ฒซ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ i ์™€ ๊ฒน์น˜์ง€ ์•Š๊ธฐ์œ„ํ•ด i + 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  4. i === j ๊ฐ€ ๋˜๋ฉด false ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  5. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
if (str === "") {
  return true;
}

let upper = str.toUpperCase();

for (let i = 0; i < upper.length; i++) {
  for (let j = i + 1; j < upper.length; j++) {
    if (upper[i] === upper[j]) {
      return false;
    }
  }
}
return true;

๋‚˜๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด ๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋“œ๋Š” for loop ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ํ™œ์šฉํ•˜์˜€๋‹ค.



if (str.length === 0) {
  return true;
}

let cache = {};
let strLowered = str.toLowerCase();

for (let i = 0; i < strLowered.length; i++) {
  if (cache[strLowered[i]]) {
    return false;
  }
  cache[strLowered[i]] = true;
}

return true;

์•„๋ฌด๋ž˜๋„ for loop ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ํ™œ์šฉํ–ˆ์œผ๋‹ˆ๊นŒ ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋“œ๊ฐ€ ๋” ์ข‹์€ ์ฝ”๋“œ์ผ๊นŒ?

๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  โ€œ์•„~ ์ €๋ ‡๊ฒŒ๋„ ํ’€ ์ˆ˜ ์žˆ๊ตฌ๋‚˜๋ฅผ ๋Š๊ผˆ๋‹คโ€ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” ์‰ฝ๊ฒŒ ํ’€์—ˆ์ง€๋งŒ
๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๋‹ค๋ฅธ ๊ฐ๋„์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ๋ฒ•๋„ ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ‘Š ๋‚ด์ผ์˜ TIW(today I Will)

DOM, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ