Jieunny์˜ ๋ธ”๋กœ๊ทธ

S4) Unit 11. [์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] Algorithm with Math & ์ •๊ทœํ‘œํ˜„์‹ ๋ณธ๋ฌธ

CodeStates/learning contents

S4) Unit 11. [์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] Algorithm with Math & ์ •๊ทœํ‘œํ˜„์‹

Jieunny 2023. 4. 6. 15:02

๐Ÿ“ฃ  ์ˆœ์—ด๊ณผ ์กฐํ•ฉ

๐Ÿญ. ์ˆœ์—ด

โœ”๏ธ ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ์ง‘ํ•ฉ์—์„œ ์–ด๋–ค ์ค‘๋ณต ์—†์ด ์ˆœ์„œ์— ์ƒ๊ด€์žˆ๊ฒŒ r๊ฐœ์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ

โžฐ ์กฐํ•ฉ๊ณผ ๋‹ฌ๋ฆฌ ์ˆœ์„œ๋„ ๋”ฐ์ ธ์„œ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋งŒ๋“ ๋‹ค.

โžฐ nPr = n! / (n-r)!

โžฐ 3P2 = 3 * 2 = 6

๐Ÿฎ. ์กฐํ•ฉ

โœ”๏ธ ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ์–ด๋–ค ์ง‘ํ•ฉ์—์„œ ์ค‘๋ณต ์—†์ด ์ˆœ์„œ์— ์ƒ๊ด€์—†๊ฒŒ r๊ฐœ์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ

โžฐ ์ˆœ์„œ๋Š” ๋”ฐ์ง€์ง€ ์•Š๋Š”๋‹ค.

โžฐ nCr = nPr / r!

โžฐ 3C2 = 3 * 2 / 2 * 1 = 3

 

๐Ÿšจ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ ๋ชจ๋‘ N์ด ์›์†Œ์˜ ์ด๊ฐœ์ˆ˜์ด๊ณ  R์ด ๋ฝ‘๋Š” ๊ฐœ์ˆ˜๋ผ๊ณ  ํ•  ๋•Œ, ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์€ ๋ฐ˜๋“œ์‹œ R <= N์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.


๐Ÿ“ฃ  GCD์™€ LCM(์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜)

๐Ÿญ. GCD(Greatest Common Divisor)

โœ”๏ธ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ :  ๋‘ ์ˆ˜ ์ด์ƒ์˜ ์—ฌ๋Ÿฌ ๊ณต์•ฝ์ˆ˜ ์ค‘ ์ตœ๋Œ€์ธ ์ˆ˜

โœ”๏ธ ๊ณต์•ฝ์ˆ˜ : ๋‘ ์ˆ˜ ์ด์ƒ์˜ ์—ฌ๋Ÿฌ ์ˆ˜ ์ค‘ ๊ณตํ†ต๋œ ์•ฝ์ˆ˜

 

๐Ÿฎ. LCM(Lowest Common Multiple)

โœ”๏ธ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ : ์—ฌ๋Ÿฌ ๊ณต๋ฐฐ์ˆ˜ ์ค‘ ์ตœ์†Œ์ธ ์ˆ˜

โœ”๏ธ ๊ณต๋ฐฐ์ˆ˜ : ๋‘ ์ˆ˜ ์ด์ƒ์˜ ์—ฌ๋Ÿฌ ์ˆ˜ ์ค‘ ๊ณตํ†ต๋œ ๋ฐฐ์ˆ˜

 

๐Ÿฏ. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹

โœ”๏ธ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋“ค์˜ ๊ณฑ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๊ตฌํ•˜๋Š” ๋ฒ•

Q. 12์™€ 18์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

A. 12 = 2 * 2 * 3

18 = 2 * 3 * 3

๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ธ 2 * 3 = 6์ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, 2 * 3์„ ์ค‘์‹ฌ์œผ๋กœ ๋‚จ์€ 2์™€ 3์„ ๊ณฑํ•ด ๋‚˜์˜ค๋Š” ์ˆ˜์ธ 36์ด ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

 

โœ”๏ธ ๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด๋ณด๋ฉฐ ๊ตฌํ•˜๋Š” ๋ฒ•

โžฐ 2์™€ 3์ด 12์™€ 18์˜ ๊ณต์•ฝ์ˆ˜์ž„์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ, 2์™€ 3์œผ๋กœ 12์™€ 18์ด ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ„๊ณ , ๋‚จ์€ ๊ฐ’์„ ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

โœ”๏ธ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• : ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ด€๋ จ์ด ๊นŠ์€ ๊ณต์‹์œผ๋กœ, a์™€ b(a > b)๊ฐ€ ์žˆ์„ ๋•Œ a๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ๊ณ  ํ•˜๋ฉด a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” b์™€r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค๋Š” ์ด๋ก  => b๋ฅผ r๋กœ ๋‚˜๋ˆˆ r'์„ ๊ตฌํ•˜๊ณ , ๋‹ค์‹œ r์„ r'๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ, ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋ ๋•Œ ๋‚˜๋ˆ„๋Š” ์ˆ˜๊ฐ€ a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋‹ค.

Q. 81๊ณผ 15์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š”?

A. 81 / 15 = 5 + 6

15 / 6 = 2 + 3

6 / 3 = 2 + 0

๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋‚˜์˜จ 3์ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋‹ค.


๐Ÿ“ฃ  ๋ฉฑ์ง‘ํ•ฉ

๐Ÿญ. ๋ฉฑ์ง‘ํ•ฉ

โœ”๏ธ ์–ด๋–ค ์ง‘ํ•ฉ์ด ์žˆ์„ ๋•Œ, ์ด ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ

โžฐ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€, ์—†๋Š”์ง€์˜ 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง‘ํ•ฉ์˜ ์š”์†Œ๊ฐ€ n๊ฐœ์ผ ๋•Œ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋Š” 2^n๊ฐœ์ด๋‹ค.

 

๐Ÿฎ. ๋ฉฑ์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

Q. ์ง‘ํ•ฉ {1, 2, 3}์˜ ๋ฉฑ์ง‘ํ•ฉ์„ ๊ตฌํ•ด๋ผ

A.

1๏ธโƒฃ 1์„ ์ œ์™ธํ•œ {2, 3}์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋‚˜์—ดํ•œ๋‹ค.

     2๏ธโƒฃ 2๋ฅผ ์ œ์™ธํ•œ {3}์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋‚˜์—ดํ•œ๋‹ค.

        3๏ธโƒฃ 3์„ ์ œ์™ธํ•œ {}์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋‚˜์—ดํ•œ๋‹ค => {}

        3๏ธโƒฃ {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {3}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค => {3}

     2๏ธโƒฃ {3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {2}๋ฅผ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค.  

        3๏ธโƒฃ {3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {2}๋ฅผ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•˜๋ ค๋ฉด, {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {2}๋ฅผ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ ๋‹ค์Œ {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {2, 3}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค. => {2}, {2, 3}

 

1๏ธโƒฃ  {2, 3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค.

     2๏ธโƒฃ {2, 3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•˜๋ ค๋ฉด, {3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ ๋‹ค์Œ {3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1, 2}๋ฅผ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค.

        3๏ธโƒฃ {3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ์„ ๋‚˜์—ดํ•˜๋ ค๋ฉด, {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ ๋‹ค์Œ {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1, 3}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค. => {1}, {1, 3}

        3๏ธโƒฃ {3}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1, 2}๋ฅผ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ์„ ๋‚˜์—ดํ•˜๋ ค๋ฉด, {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1, 2}๋ฅผ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ ๋‹ค์Œ {}์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์— {1, 2, 3}์„ ์ถ”๊ฐ€ํ•œ ์ง‘ํ•ฉ๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค. => {1, 2}, {1, 2, 3}


๐Ÿ“ฃ  Algorithm with Math ์˜ˆ์ œ

๐Ÿญ. ์ˆœ์—ด๊ณผ ์กฐํ•ฉ : ์นด๋“œ ๋ฌธ์ œ

Q. [A, B, C, D, E]๋กœ ์ด๋ค„์ง„ 5์žฅ์˜ ์นด๋“œ๊ฐ€ ์žˆ๊ณ , ์ด 5์žฅ์˜ ์นด๋“œ ์ค‘ 3์žฅ์„ ์„ ํƒํ•˜์—ฌ ๋‚˜์—ดํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋•Œ, ๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๊ฐ๊ฐ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

1. ์ˆœ์„œ๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ 3์žฅ์„ ์„ ํƒํ•œ๋‹ค.

2. ์ˆœ์„œ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  3์žฅ์„ ์„ ํƒํ•œ๋‹ค.

 

A. 1์€ ์ˆœ์—ด, 2๋Š” ์กฐํ•ฉ ๋ฌธ์ œ์ด๋‹ค.

1๏ธโƒฃ ์ˆœ์—ด์˜ ๊ฒฝ์šฐ

โžฐ ๋ชจ๋“  ์นด๋“œ๋ฅผ 1์žฅ์”ฉ ๋‚˜์—ดํ•˜๋ฉด์„œ, ๋‚˜์—ด๋œ ์นด๋“œ๊ฐ€ 3์žฅ์— ๋„๋‹ฌํ•˜๋ฉด ๋‚˜์—ด์„ ์ค‘์ง€ํ•œ๋‹ค.

โžฐ ์ฒซ๋ฒˆ์งธ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• 5๊ฐ€์ง€, ๋‘๋ฒˆ์งธ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• 4๊ฐ€์ง€, ์„ธ๋ฒˆ์งธ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ => 5 * 4 * 3 = 60๊ฐ€์ง€

function permutationLoop() {
	// ์ˆœ์—ด ์š”์†Œ๊ฐ€ ์ธ์ž๋กœ ์ฃผ์–ด์งˆ ๊ฒฝ์šฐ, ์ธ์ž ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š๊ณ 
	// ๋ฌธ์ œ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ง์ ‘ ์ ์–ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  let lookup = ['A', 'B', 'C', 'D', 'E'];

  let result = [];

  for (let i = 0; i < lookup.length; i++) {
    for (let j = 0; j < lookup.length; j++) {
      for (let k = 0; k < lookup.length; k++) {
        if(i === j || j === k || k === i) continue;
        // ๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ๊ทธ๋ƒฅ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค.
        result.push([lookup[i], lookup[j], lookup[k]])
      }
    }
  }

  return result;
}

permutationLoop();

 

2๏ธโƒฃ ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ

โžฐ 3์žฅ์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค => ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— [A, B, C], [A, C, B], [B, A, C], [B, C, A], [C, A, B], [C, B, A] ๋Š” ๋ชจ๋‘ ํ•œ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ [A, B, C] ์ž์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ์ƒ๊ฐํ•ด์„œ ํ•œ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ผ๊ณ  ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

โžฐ ์ˆœ์—ด์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๊ทธ๋ฃน์—์„œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” 6๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ด ์กฐํ•ฉ์˜ ๊ฒฐ๊ณผ์ด๋‹ค.

โžฐ 60 / 6 = 10

function combinationLoop() {
	// ์กฐํ•ฉ ์š”์†Œ๊ฐ€ ์ธ์ž๋กœ ์ฃผ์–ด์งˆ ๊ฒฝ์šฐ, ์ธ์ž ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š๊ณ 
	// ๋ฌธ์ œ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ง์ ‘ ์ ์–ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  let lookup = ['A', 'B', 'C', 'D', 'E'];
  let result = [];

  console.log(lookup);

  for (let i = 0; i < lookup.length; i++) {
    for (let j = i + 1; j < lookup.length; j++) {
      for (let k = j + 1; k < lookup.length; k++) {
      // ํ•œ๋ฒˆ ์กฐํ•ฉํ•œ ์š”์†Œ๋Š” ๋‹ค์‹œ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ทธ ์š”์†Œ ๋‹ค์Œ ์š”์†Œ๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•œ๋‹ค.
        result.push([lookup[i], lookup[j], lookup[k]]);
      }
    }
  }

  return result;
}

combinationLoop();

 

๐Ÿšจ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์€ ๋ฐ˜๋ณต๋ฌธ์ด ์•„๋‹Œ '์žฌ๊ท€'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

๐Ÿฎ. GCD์™€ LCM : ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ

1๏ธโƒฃ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

function gcd(a, b){
	while(b !== 0){
    // ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
		let r = a % b;
        // r ์€ ์ฒซ๋ฒˆ์งธ ์ˆ˜์™€ ๋‘๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€
		a = b;
        // ์ฒซ๋ฒˆ์งธ ๋‚˜๋ˆ ์งˆ ์ˆ˜๋Š” ๋‘๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๋˜๊ณ 
		b = r;
        // ๋‘๋ฒˆ์งธ ์ˆ˜๋Š” ๋‘ ์ˆ˜๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ ๋œ๋‹ค.
	}
	return a;
}

 

2๏ธโƒฃ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

function lcm(a, b){
	return a * (b / gcd(a, b));
    // ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•ด์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , 
    // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
}

 

๐Ÿฏ. ๋ฉฑ์ง‘ํ•ฉ - Power Set

let inputSet = ['a', 'b', 'c'];

function powerSet (arr) {
	const result = [];

	function recursion (subset, start) {
		result.push(subset);

		for(let i = start; i < arr.length; i++){
			recursion([...subset, arr[i]], i+1);
			//์ด๋ ‡๊ฒŒ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
			recursion(subset.concat(arr[i]), i+1);
		}
	}

	recursion([], 0);

	return result;
}

poserSet(inputSet);

๐Ÿ“ฃ  ์ •๊ทœํ‘œํ˜„์‹

๐Ÿญ. ์ •๊ทœ ํ‘œํ˜„์‹

โœ”๏ธ ๋ฌธ์ž์—ด์—์„œ ํŠน์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ฅธ ๋ฌธ์ž์—ด ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ˜•์‹์–ธ์–ด

โžฐ ํŠน์ •ํ•œ ๊ทœ์น™์„ ๊ฐ–๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘œํ˜„์‹์œผ๋กœ, ํŠน์ˆ˜ ๋ฌธ์ž๋Š” ๊ฐ๊ฐ์˜ ๊ณ ์œ  ๊ทœ์น™์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

 

๐Ÿฎ. ์ •๊ทœ ํ‘œํ˜„์‹ ์˜ˆ์‹œ

โœ”๏ธ ์ด๋ฉ”์ผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

const email = 'kimcoding@codestates.com';
let result = '์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค.';

// 1. ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉ
let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;

if(regExp.test(email) === false) result = '์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.';
result; // '์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.'

-----------------------------------------------------------------------------

// 2. ์ •๊ทœํ‘œํ˜„์‹์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ์ด๋ฉ”์ผ ์•„์ด๋””๊ฐ€ ์˜๋ฌธ ์†Œ๋ฌธ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ
let idx = email.indexOf('@');
if(idx === -1) result = '์˜๋ฌธ ์†Œ๋ฌธ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.';

let ID = email.slice(0,idx);

ID.split('').forEach(e => {
	e = e.charCodeAt(0);
	if(e < 97 || e > 122){
	result = '์˜๋ฌธ ์†Œ๋ฌธ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.';
	}
});

result; // '์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค.'

 

๐Ÿฏ. ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด

^ ์ค„(Line)์˜ ์‹œ์ž‘์—์„œ ์ผ์น˜ /^abc/
$ ์ค„(Line)์˜ ๋์—์„œ ์ผ์น˜ /xyz$/
. (ํŠน์ˆ˜๊ธฐํ˜ธ, ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํฌํ•จํ•œ) ์ž„์˜์˜ ํ•œ ๋ฌธ์ž
a|b a or b ์™€ ์ผ์น˜, ์ธ๋ฑ์Šค๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ์šฐ์„  ๋ฐ˜ํ™˜
* 0ํšŒ ์ด์ƒ ์—ฐ์†์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์™€ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ์ผ์น˜. {0,} ์™€ ๋™์ผ
*? 0ํšŒ ์ด์ƒ ์—ฐ์†์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์™€ ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ ์ผ์น˜. {0} ์™€ ๋™์ผ
+ 1ํšŒ ์ด์ƒ ์—ฐ์†์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์™€ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ์ผ์น˜. {1,} ์™€ ๋™์ผ
+? 1ํšŒ ์ด์ƒ ์—ฐ์†์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์™€ ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ ์ผ์น˜. {1} ์™€ ๋™์ผ
{3} ์ˆซ์ž 3๊ฐœ ์—ฐ์† ์ผ์น˜
{3, } 3๊ฐœ ์ด์ƒ ์—ฐ์† ์ผ์น˜
{3, 5} 3๊ฐœ ์ด์ƒ 5๊ฐœ ์ดํ•˜ ์—ฐ์† ์ผ์น˜
() ์บก์ณ(capture)ํ•  ๊ทธ๋ฃน
[a-z] a๋ถ€ํ„ฐ z ์‚ฌ์ด์˜ ๋ฌธ์ž ๊ตฌ๊ฐ„์— ์ผ์น˜(์˜์–ด ์†Œ๋ฌธ์ž)
[A-Z] A๋ถ€ํ„ฐ Z ์‚ฌ์ด์˜ ๋ฌธ์ž ๊ตฌ๊ฐ„์— ์ผ์น˜(์˜์–ด ๋Œ€๋ฌธ์ž)
[0-9] 0๋ถ€ํ„ฐ 9 ์‚ฌ์ด์˜ ๋ฌธ์ž ๊ตฌ๊ฐ„์— ์ผ์น˜(์ˆซ์ž)
\ escape ๋ฌธ์ž. ํŠน์ˆ˜ ๊ธฐํ˜ธ ์•ž์— \๋ฅผ ๋ถ™์ด๋ฉด ์ •๊ทœ์‹ ํŒจํ„ด์ด ์•„๋‹Œ, ๊ธฐํ˜ธ ์ž์ฒด๋กœ ์ธ์‹
\d ์ˆซ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•จ. /[0-9]/์™€ ๋™์ผ
\D ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•จ. /[^0-9]/์™€ ๋™์ผ
\w ์˜์–ด๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, (underscore)๋ฅผ ๊ฒ€์ƒ‰ํ•จ. /[A-Za-z0-9]/ ์™€ ๋™์ผ
\W ์˜์–ด๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, (underscore)๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•จ. /[^A-Za-z0-9]/ ์™€ ๋™์ผ
[^] []์•ˆ์˜ ๋ฌธ์ž์—ด ์•ž์— ^์ด ์“ฐ์ด๋ฉด, []์•ˆ์— ์—†๋Š” ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•จ

 

๐Ÿฐ. ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉํ•˜๊ธฐ

Q. ๋ฌธ์ž์—ด str ์ด ์ฃผ์–ด์งˆ ๋•Œ, str์˜ ๊ธธ์ด๊ฐ€ 5 ๋˜๋Š” 7์ด๋ฉด์„œ ์ˆซ์ž(0~9)๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด ์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋ผ.

๊ฒฐ๊ณผ๋Š” Boolean์œผ๋กœ ๋ฆฌํ„ด๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด str๊ฐ€ c2021์ด๋ฉด false, 20212์ด๋ฉด true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

// ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉ
function solution(str) {
    return /^\d{5}$|^\d{7}$/.test(str);
}

 

๐Ÿฑ. ์ •๊ทœ ํ‘œํ˜„์‹์˜ ์‹ค๋ก€

โœ”๏ธ JS์—์„œ ์ •๊ทœํ‘œํ˜„์‹์€ ๊ฐ์ฒด๋กœ, ๋‚ด์žฅ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

1๏ธโƒฃ RegExp ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ

โœ”๏ธ exec() : ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋ฝ‘์•„๋‚ด๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

โžฐ ๊ฒ€์ƒ‰์˜ ๋Œ€์ƒ์ด ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ฐพ๋Š” ๋ฌธ์ž์—ด์ด ์—†๋‹ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โœ”๏ธ test() : ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ๋Œ€์ƒ ์•ˆ์— ์žˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ boolean ์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

 

2๏ธโƒฃ String ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ

โœ”๏ธ match() : RegExp.exec() ์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋ฉฐ, ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ธ์ž๋กœ ๋ฐ›์•„ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

โžฐ ์ผ์น˜๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

โœ”๏ธ replace() : '๊ฒ€์ƒ‰ ํ›„ ๋ฐ”๊พธ๊ธฐ'๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

โžฐ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์ •๊ทœํ‘œํ˜„์‹์„ ๋ฐ›๊ณ , ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์น˜ํ™˜ํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ›๋Š”๋‹ค.

โžฐ ์ž์—ด์—์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์ด๋ฅผ ์น˜ํ™˜ํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ ํ›„ ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

โœ”๏ธ split() : ์ฃผ์–ด์ง„ ์ธ์ž๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ์‚ผ์•„, ๋ฌธ์ž์—ด์„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ„์–ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โœ”๏ธ search() : ์ •๊ทœํ‘œํ˜„์‹์„ ์ธ์ž๋กœ ๋ฐ›์•„ ๊ฐ€์žฅ ์ฒ˜์Œ ๋งค์นญ๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

โžฐ ๋งค์นญ๋˜๋Š” ๋ฌธ์ž์—ด์ด ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

3๏ธโƒฃ flag

โœ”๏ธ ์ •๊ทœํ‘œํ˜„์‹์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”Œ๋ž˜๊ทธ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ฒ€์ƒ‰ ์˜ต์…˜์˜ ์—ญํ• ์„ ํ•œ๋‹ค.

โžฐ ํ”Œ๋ž˜๊ทธ๋“ค์€ ๊ฐ์ž ํ˜น์€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ˆœ์„œ์— ๊ตฌ๋ถ„์ด ์—†๋‹ค.

 

โœ”๏ธ i๋ฅผ ๋ถ™์ด๋ฉด ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โœ”๏ธ g๋ฅผ ๋ถ™์ด๋ฉด ๊ฒ€์ƒ‰๋œ ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

โœ”๏ธ m์„ ๋ถ™์ด๋ฉด ๋‹ค์ค‘ํ–‰์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

 

4๏ธโƒฃ ์ •๊ทœ์‹ ํŒจํ„ด(ํ‘œํ˜„์‹)

โœ”๏ธ ์ •๊ทœํ‘œํ˜„์‹์— ๋‹ค์–‘ํ•œ ํŠน์ˆ˜๊ธฐํ˜ธ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ์— ๋” ๋งŽ์€ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ”๏ธ Anchors: ^ and $

โžฐ ^ : ๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฌธ์ž์—ด์—์„œ ^๋’ค์— ๋ถ™์€ ๋‹จ์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค.

    ใ„ด ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋”๋ผ๋„, ๊ทธ ๋ถ€๋ถ„์ด ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ฉด null์„ ๋ฆฌํ„ดํ•œ๋‹ค.

โžฐ $ : ๋ฌธ์ž์—ด์˜ ๋์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฌธ์ž์—ด์—์„œ $์•ž์˜ ํ‘œํ˜„์‹์œผ๋กœ ๋๋‚˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค.

    ใ„ด ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋”๋ผ๋„, ๊ทธ ๋ถ€๋ถ„์ด ๋ฌธ์ž์—ด์˜ ๋๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ฉด null์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

โœ”๏ธ Quantifiers: *, +, ? and {}

โžฐ * : ๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž๊ฐ€ 0๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

    ใ„ด /ode*/g ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด "od" ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด์„œ ๊ทธ ๋’ค์— "e"๊ฐ€ 0๋ฒˆ ์ด์ƒ ํฌํ•จ๋œ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.

โžฐ + : + ๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž๊ฐ€ 1๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

โžฐ ? : ? ์•ž์˜ ๋ฌธ์ž๊ฐ€ 0๋ฒˆ ํ˜น์€ 1๋ฒˆ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋งŒ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

    ใ„ด ?๋Š” * ํ˜น์€ + ์™€ ํ•จ๊ป˜ ์“ฐ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ *?๋Š” 0๋ฒˆ, +?๋Š” 1๋ฒˆ์ธ ๋ฌธ์ž์—ด๋งŒ ๋ฆฌํ„ดํ•œ๋‹ค.

โžฐ {} : ์ง์ ‘ ์ˆซ์ž๋ฅผ ๋„ฃ์–ด์„œ ์—ฐ์†๋˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ใ„ด {2}๋Š” 2๊ฐœ, {2, }๋Š” 2๊ฐœ ์ด์ƒ, {2, 5}๋Š” 2๊ฐœ ์ด์ƒ 5๊ฐœ ์ดํ•˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

โœ”๏ธ OR operator

โžฐ | ๋Š” or ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ | ์˜ ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โœ”๏ธ Bracket Operator : []

โžฐ ๋Œ€๊ด„ํ˜ธ [] ์•ˆ์— ๋ช…์‹œ๋œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

 

โœ”๏ธ Character classes 

โžฐ \d : d ๋Š” digit ์„ ์˜๋ฏธํ•˜๋ฉฐ 0 ~ 9 ์‚ฌ์ด์˜ ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. [0-9] ์™€ ๋™์ผ

โžฐ \D : not Digit ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. [^0-9] ์™€ ๋™์ผ

โžฐ \w : ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, _(underbar) ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. [a-zA-Z0-9_]์™€ ๋™์ผ

โžฐ \W : ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, _ (underbar)๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. [^a-zA-Z0-9_]์™€ ๋™์ผ

 

โœ”๏ธ Grouping and capturing

โžฐ ๊ทธ๋ฃนํ™” : ํ‘œํ˜„์‹์˜ ์ผ๋ถ€๋ฅผ ()๋กœ ๋ฌถ์–ด์ฃผ๋ฉด ๊ทธ ์•ˆ์˜ ๋‚ด์šฉ์„ ํ•˜๋‚˜๋กœ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ ์บก์ณ : () ๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค๊ณ  ํ•˜์˜€๊ณ , ์ด๋ฅผ ์บก์ฒ˜ํ•œ๋‹ค ๋ผ๊ณ  ํ•œ๋‹ค.

co.match(/(co)+/); // ["coco", "co", index: 0, input: "coco", groups: undefined]

ใ„ด () ๋กœ "co"๋ฅผ ์บก์ฒ˜

ใ„ด ์บก์ฒ˜ํ•œ "co" ๋Š” ์ผ๋‹จ ๋‹น์žฅ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , + ๊ฐ€ "co"์˜ 1ํšŒ ์ด์ƒ ์—ฐ์† ๋ฐ˜๋ณต์„ ๊ฒ€์ƒ‰

ใ„ด ์ด๋ ‡๊ฒŒ ์บก์ฒ˜ ์ด์™ธ ํ‘œํ˜„์‹์ด ๋ชจ๋‘ ์ž‘๋™ํ•˜๊ณ  ๋‚˜๋ฉด, ์บก์ฒ˜ํ•ด ๋‘์—ˆ๋˜ "co"๋ฅผ ๊ฒ€์ƒ‰

 

โœ”๏ธ non-capturing

โžฐ (?:)๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ฃน์€ ๋งŒ๋“ค์ง€๋งŒ ์บก์ฒ˜๋Š” ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

โœ”๏ธ lookahead

โžฐ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด์— (?=์—ฌ๊ธฐ) ์— ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ์–ด์•ผ (?=์—ฌ๊ธฐ) ์•ž์˜ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โœ”๏ธ negated lookahead

โžฐ (?!) ๋Š” (?=) ์˜ ๋ถ€์ •