๐Ÿ“Œ 1. ๋ฌธ์ œ


[Programmers, Level1] ์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜?


๊ธธ์ด๊ฐ€ n์ด๊ณ , ์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜โ€ฆ.์™€ ๊ฐ™์€ ํŒจํ„ด์„ ์œ ์ง€ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•˜์„ธ์š”. ์˜ˆ๋ฅผ๋“ค์–ด n์ด 4์ด๋ฉด ์ˆ˜๋ฐ•์ˆ˜๋ฐ•์„ ๋ฆฌํ„ดํ•˜๊ณ  3์ด๋ผ๋ฉด ์ˆ˜๋ฐ•์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์ œํ•œ ์กฐ๊ฑด
n์€ ๊ธธ์ด 10,000์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.


n return
3 โ€œ์ˆ˜๋ฐ•์ˆ˜โ€
4 โ€œ์ˆ˜๋ฐ•์ˆ˜๋ฐ•โ€


โœ ํ’€์ด

function solution(n) {
  let arr = [];
  for (let i = 0; i < n; i++) {
    i % 2 ? arr.push("๋ฐ•") : arr.push("์ˆ˜");
  }
  const answer = arr.join("");
  return answer;
}


  • ๋‹ค๋ฅธ ํ’€์ด์—์„œ๋Š” repeat ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋žŒ๋„ ๊ฝค ์žˆ์—ˆ๋‹ค.
    str.repeat(count) : ์ฃผ์–ด์ง„ ํšŸ์ˆ˜(count)๋งŒํผ ๋ฐ˜๋ณตํ•ด ๋ถ™์ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด๋‹ค.(MDN)
    (MDN์„ ๋ณด๋‹ˆ IE์—์„œ๋Š” ํ˜ธํ™˜์ด ์•ˆ๋˜๋„ค..^^ํ•˜ํ•˜..)
    (+) ๋ฒˆ์™ธ๋กœ ๋ˆ„๊ฐ€ ์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์„ ๊ธธ๊ฒŒ ์ž‘์„ฑํ•ด์„œ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ณ  substring์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž๋ฅธ๊ฑธ๋ณด๊ณ  ์›ƒ๊ฒผ..ใ…‹ใ…‹)


๐Ÿ“Œ 2. ๋ฌธ์ œ


[Programmers, Level1] ๋ฌธ์ž์—ด ๋‚ด p์™€ y์˜ ๊ฐœ์ˆ˜


๋Œ€๋ฌธ์ž์™€ ์†Œ๋ฌธ์ž๊ฐ€ ์„ž์—ฌ์žˆ๋Š” ๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. s์— โ€˜pโ€™์˜ ๊ฐœ์ˆ˜์™€ โ€˜yโ€™์˜ ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ•ด ๊ฐ™์œผ๋ฉด True, ๋‹ค๋ฅด๋ฉด False๋ฅผ return ํ•˜๋Š” solution๋ฅผ ์™„์„ฑํ•˜์„ธ์š”. โ€˜pโ€™, โ€˜yโ€™ ๋ชจ๋‘ ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ํ•ญ์ƒ True๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ•  ๋•Œ ๋Œ€๋ฌธ์ž์™€ ์†Œ๋ฌธ์ž๋Š” ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด s๊ฐ€ pPoooyY๋ฉด true๋ฅผ returnํ•˜๊ณ  Pyy๋ผ๋ฉด false๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.


์ œํ•œ์‚ฌํ•ญ
๋ฌธ์ž์—ด s์˜ ๊ธธ์ด : 50 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
๋ฌธ์ž์—ด s๋Š” ์•ŒํŒŒ๋ฒณ์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.


s answer
โ€œpPoooyYโ€ true
โ€œPyyโ€ false


โœ ํ’€์ด

function solution(s) {
  const arr = s.toUpperCase().split("");
  const pArr = arr.filter((item) => {
    return item === "P";
  });
  const yArr = arr.filter((item) => {
    return item === "Y";
  });
  return pArr.length - yArr.length === 0;
}


๐Ÿ‘ Best - 1

function numPY(s) {
  return (
    s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length
  );
}

๐Ÿ‘ Best - 2

function numPY(s) {
  return s.match(/p/gi).length == s.match(/y/gi).length;
}


  • ์ฝ”๋“œ๋ฅผ ์ œ์ถœํ•˜๋ฉด์„œ๋„ ํ†ต๊ณผ๋Š” ๋˜๊ฒ ์ง€๋งŒ, ์ง„์งœ ๋ณ„๋กœ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค,,,^^ ์šฐ์„  ๋‚˜๋Š” ์›ํ•˜๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ ์—†์–ด์„œ.. filter ๋ฉ”์†Œ๋“œ๋กœ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ์ƒˆ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.
    • best-1 ์ฝ”๋“œ๋Š” split์œผ๋กœ ๋ฌธ์ž๋ฅผ ๋‚˜๋ˆŒ ๋•Œ, ํ•ด๋‹น ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ ์„œ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ–ˆ๋‹ค. ๋‚˜๋Š” p์™€ y์˜ ์ •ํ™•ํ•œ ๊ฐœ์ˆ˜๋งŒ ๋น„๊ตํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ split์œผ๋กœ ๋‚˜๋ˆ ์ง„ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ๋„ ์ƒˆ๋กœ์šด ์ ‘๊ทผ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. (+ ๋‚ด ์ฝ”๋“œ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ๋‚ด ํ’€์ด์˜ filter๋Š” ์ •๋ง ํ•„์š”์—†๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ผ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค..)
    • best-2 ์—์„œ๋Š” match ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ์ฒ˜์Œ๋ดค๋‹ค.
      match : ๋ฌธ์ž์—ด์ด ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š” ๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.(MDN)
      i๋Š” ๋Œ€์†Œ๋ฌธ์ž ์ƒ๊ด€์—†์ด g๋Š” ์ „๋ถ€ ์ฐพ์œผ๋ผ๋Š” ํ”Œ๋ž˜๊ทธ. โ†’ regular expression - MDN ์ฐธ๊ณ