Simple Pig Latin<5 kyu>

jjanmoยท2020๋…„ 2์›” 11์ผ
0

Codewars์—์„œ ๋’น๊ตด๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
31/32

๋ฌธ์ œ๋งํฌ

๋ฌธ์ œ

Move the first letter of each word to the end of it, then add "ay" to the end of the word. Leave punctuation marks untouched.

Examples

pigIt('Pig latin is cool'); // igPay atinlay siay oolcay
pigIt('Hello world !');     // elloHay orldway !

๐Ÿšฉ ๊ฐ ๋‹จ์–ด์˜ ์ฒซ๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ๊ทธ ๊ธ€์ž์˜ ๋์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  'ay'๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ์˜ค. punctuation marks(๋ฌธ์žฅ๋ถ€ํ˜ธ/๊ตฌ๋‘์ )์ผ ๋•Œ๋Š” ๋ณ€๊ฒฝ์ด ์—†๋„๋ก ํ•˜์‹œ์˜ค

๋ฌธ์ œ์ ‘๊ทผ

์ฒซ๋ฒˆ์งธ ์กฐ๊ฑด์€ ๋ณ„๋ฌด๋ฆฌ์—†์ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ๋‘์ !! ์ด๊ฒƒ์„ ๊ณจ๋ผ๋‚ด๋Š” ๊ฒƒ์ด ๊นŒ๋‹ค๋กœ์› ๋‹ค. ์—ญ์‹œ ์ •๊ทœํ‘œํ˜„์‹์—์„œ ๋ง‰ํ˜”๋‹ค. ์ฃผ์–ด์ง„ ์ƒ˜ํ”Œํ…Œ์ŠคํŠธ์˜ ๊ฒฝ์šฐ์—” '?' ํ˜น์€ '!'๋งŒ์ด ์ฃผ์–ด์ ธ์„œ ๋ฌธ์ œ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ, ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด์„  ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ๋งŒ ํ–ˆ๋‹ค. ์˜ค๋Š˜๋„ ์ด ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด์„œ ๋ช‡ ๊ฐ€์ง€์˜ ์ •๊ทœํ‘œํ˜„์‹์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • ๋‚˜์˜ ํ’€์ด
function pigIt(str){
  return str.split(' ')
    		.map(word => 
    		     word === '?' || word === '!' ? 
                     word : `${word.slice(1)}${word.slice(0,1)}ay`)
    		.join(' ')
};

๐ŸŽˆ ์ด ํ’€์ด๋Š” ์—„๋ฐ€ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ํ‹€๋ฆฐ ํ’€์ด์ด๋‹ค. ์ด ๋ฌธ์ œ์˜ ์ƒ˜ํ”Œํ…Œ์ŠคํŠธ๋งŒ์„ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•ด์„œ ์šฐ์„  ์ด๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค.

์ •๊ทœํ‘œํ˜„์‹์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

๐ŸŽˆ ์ฐธ๊ณ ๋ฌธ์„œ์—์„œ ์„ค๋ช…์ด ์ž˜ ๋˜์–ด์žˆ์–ด์„œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ๋“ค์€ ๊ฐ€์ ธ์™€๋ดค๋‹ค. ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ‘

  1. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์˜ ๋˜์–ด์žˆ๋Š” ํŒจํ„ด๋“ค
  • \w : ์˜๋ฌธ์ž ๋ฐ _ ๋ฌธ์ž์™€ ์ผ์น˜โœ…
  • \W : ์˜๋ฌธ์ž ๋ฐ _ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์™€ ์ผ์น˜
  • \d : ์ˆซ์ž์™€ ์ผ์น˜
  • \D : ์ˆซ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์™€ ์ผ์น˜
  • \s : ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ณต๋ฐฑ ๋ฌธ์ž์™€ ์ผ์น˜(๊ณต๋ฐฑ๋ฌธ์ž์˜ ์ข…๋ฅ˜ : ์ŠคํŽ˜์ด์Šค, ํƒญ ๋“ฑ....)
  • \S : ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์™€ ์ผ์น˜
  1. ๊ธฐ๋ณธ์ ์ธ ๋ฉ”ํƒ€๋ฌธ์ž๋“ค
  • . : ๋ชจ๋“  ๋ฌธ์ž์™€ ์ผ์น˜
  • [] : ๋Œ€๊ด„ํ˜ธ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๋“ค ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜
  • [^] : ๋Œ€๊ด„ํ˜ธ ์‚ฌ์ด์˜ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ ^ ๋ฌธ์ž๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ๋ฌธ์ž ์ดํ›„์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๋“ค์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž์™€ ์ผ์น˜
  • [a-z] : ๋Œ€๊ด„ํ˜ธ ์‚ฌ์ด์—์„œ ํŠน์ •๋ฌธ์ž1-ํŠน์ •๋ฌธ์ž2๊ฐ€ ์กด์žฌํ•  ๋•Œ, ํŠน์ •๋ฌธ์ž1๊ณผ ํŠน์ •๋ฌธ์ž2์‚ฌ์ด์˜ ๋ชจ๋“  ๋ฌธ์ž์™€ ์ผ์น˜, ์˜ˆ๋ฅผ ๋“ค์–ด [0-9]์˜ ๊ฒฝ์šฐ, 0 ๋ถ€ํ„ฐ 9๊นŒ์ง€ ๋ชจ๋“  ์ˆซ์ž์™€ ์ผ์น˜, [a-z]์˜ ๊ฒฝ์šฐ, a๋ถ€ํ„ฐ z๊นŒ์ง€ ๋ชจ๋“  ์†Œ๋ฌธ์ž ์•ŒํŒŒ๋ฒณ๊ณผ ์ผ์น˜
  • ^ : ๋Œ€๊ด„ํ˜ธ ์‚ฌ์ด์— ์กด์žฌํ•  ๋•Œ๋Š” ๋ถ€์ •์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ๋Œ€๊ด„ํ˜ธ ๋ฐ–์—์„œ๋Š” ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘๊ณผ ์ผ์น˜
  • $ : ^์™€ ๋ฐ˜๋Œ€๋กœ, ๋ฌธ์ž์—ด์˜ ๋๊ณผ ์ผ์น˜
  • * : ์•ž์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๊ฐ€ 0๋ฒˆ ํ˜น์€ ๊ทธ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ
  • + : ์•ž์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๊ฐ€ 1๋ฒˆ ํ˜น์€ ๊ทธ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉโœ…
  • ? : ์•ž์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ์„ ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
  • \ : . ํ˜น์€ [] ๋“ฑ ํŠน์ˆ˜ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ๋ฌธ์ž์—ด์—์„œ ์ฐพ๊ณ  ์‹ถ์„ ๋•Œ, ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ธฐํ˜ธ. .์€ ๋ชจ๋“  ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜์ง€๋งŒ, \.์˜ ๊ฒฝ์šฐ, .๋ฌธ์ž์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ„

์ •๊ทœํ‘œํ˜„์‹์„ ํ™œ์šฉํ•œ ํ’€์ด

function pigIt(str){
  return str.split(' ')
          .map(ele => ele.match(/\w+/) ? `${ele.substring(1)}${ele[0]}ay` : ele)
          .join(' ');
}

๐ŸŽˆ ์œ„์—์„œ ์ฒดํฌํ‘œ์‹œํ•œ ๋‚ด์šฉ๋“ค์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋ณด๋ฉด ๋ณ„๊ฑฐ์•„๋‹Œ ๊ฒƒ ๊ฐ™์€๋ฐ... ์šฐ์„  ์•Œ์•„์•ผํ•œ๋‹ค!!

๐ŸŽˆ ์ด ์ •๊ทœํ‘œํ˜„์‹ ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒƒ๋“ค์ด ์กด์žฌํ–ˆ์ง€๋งŒ ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ์•Œ์•„๋ณด๊ธฐ ํŽธํ•œ ๊ฒƒ์„ ๊ฐ€์ ธ์™”๋‹ค.๐Ÿ˜…

ele.match(/\w+/) ์ด ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•ด๋ณด๋ฉด, ๋‹จ์–ด ์•ˆ์— ์˜๋ฌธ์ž ๋ฐ _์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด 1๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋ฉด ์‚ผํ•ญ์—ฐ์‚ฐ์ž์˜ ์ฒซ๋ฒˆ์งธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ƒฅ ๊ทธ ๋‹จ์–ด(์—ฌ๊ธฐ์„  punctuation marks)๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ์—๋„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์˜ ์ฒซ๊ธ€์ž๋ฅผ ์œ„์—์„œ ์ฒ˜๋Ÿผ ele[0] ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ 

์ •๊ทœ ํ‘œํ˜„์‹ (์ข€ ๋”) ๊นŠ์ด ์•Œ์•„๋ณด๊ธฐ

profile
๋ˆˆ๊ธธ์„ ๊ฑธ์–ด๊ฐˆ ๋•Œ ์–ด์ง€๋Ÿฝ๊ฒŒ ๊ฑท์ง€ ๋ง๊ธฐ๋ฅผ.

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