[Algorithm/JavaScript] ์Šคํ‚ฌํŠธ๋ฆฌ

Dicoยท2020๋…„ 12์›” 18์ผ
0

[Algorithm/JavaScript]

๋ชฉ๋ก ๋ณด๊ธฐ
11/18

Programmers Level.2 Question Review ๐Ÿ’ก


๋ฌธ์ œ์ถœ์ฒ˜: https://programmers.co.kr/learn/courses/30/lessons/49993

๋ฌธ์ œ

๋ฌธ์ œ์„ค๋ช…

์„ ํ–‰ ์Šคํ‚ฌ์ด๋ž€ ์–ด๋–ค ์Šคํ‚ฌ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์Šคํ‚ฌ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ๊ฐ€ ์ŠคํŒŒํฌ โ†’ ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ โ†’ ์ฌ๋”์ผ๋•Œ, ์ฌ๋”๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๊ณ , ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ์ŠคํŒŒํฌ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์ˆœ์„œ์— ์—†๋Š” ๋‹ค๋ฅธ ์Šคํ‚ฌ(ํž๋ง ๋“ฑ)์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ŠคํŒŒํฌ โ†’ ํž๋ง โ†’ ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ โ†’ ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ฌ๋” โ†’ ์ŠคํŒŒํฌ๋‚˜ ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ โ†’ ์ŠคํŒŒํฌ โ†’ ํž๋ง โ†’ ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill๊ณผ ์œ ์ €๋“ค์ด ๋งŒ๋“  ์Šคํ‚ฌํŠธ๋ฆฌ1๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด skill_trees๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ์Šคํ‚ฌ์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ, ๋ชจ๋“  ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ‚ฌ ์ˆœ์„œ์™€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ฌธ์ž์—ด๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, C โ†’ B โ†’ D๋ผ๋ฉด CBD๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค
  • ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 26 ์ดํ•˜์ด๋ฉฐ, ์Šคํ‚ฌ์€ ์ค‘๋ณตํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • skill_trees๋Š” ๊ธธ์ด 1 ์ด์ƒ 20 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • skill_trees์˜ ์›์†Œ๋Š” ์Šคํ‚ฌ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    skill_trees์˜ ์›์†Œ๋Š” ๊ธธ์ด๊ฐ€ 2 ์ด์ƒ 26 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ด๋ฉฐ, ์Šคํ‚ฌ์ด ์ค‘๋ณตํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  • "BACDE": B ์Šคํ‚ฌ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— C ์Šคํ‚ฌ์„ ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฝ๋‹ˆ๋‹ค.
  • "CBADF": ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • "AECB": ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • "BDA": B ์Šคํ‚ฌ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— C ์Šคํ‚ฌ์„ ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ œ์ถœ๋‹ต์•ˆ

function solution(skill, skill_trees) {
    var answer = 0;
    let skillArr = skill.split(""); //skill ์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ„์–ด๋‘๊ธฐ. ์ธ๋ฑ์Šค๋กœ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•  ์˜ˆ์ •.
    let newStr;
    
    skill_trees.forEach(str => {
     newStr = str.split("").filter(el => skillArr.includes(el)).join("");//skillArr์— ์žˆ๋Š” ์š”์†Œ๋“ค๋งŒ '์ฐจ๋ก€๋Œ€๋กœ' ๋ฐ˜ํ™˜ํ•ด์„œ string์œผ๋กœ ๋งŒ๋“ค๊ธฐ  
     if (newStr === skill.substring(0, newStr.length)) {
         answer++;
     }  
    })
    return answer;
}

์˜ค๋Š˜์˜ Lesson

  • ์ฒ˜์Œ์—๋Š” skill๋กœ ์ฃผ์–ด์ง€๋Š” string์˜ ๊ฐ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๋ฉด ์ž‘์€ ๊ฒƒ โžก๏ธ ํฐ ๊ฒƒ ์ˆœ์„œ๋กœ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ...ํ•˜๋Š” ๋ง‰์—ฐํ•œ ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋‹ค.
    ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ™•์ธํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ skill ์†์˜ ๊ธ€์ž๋“ค์ด (์‚ฌ์ด์‚ฌ์ด์— ์–ด๋–ค ๊ธ€์ž๋“ค์ด ๋ผ์–ด ์žˆ๋Š”์ง€์—๋Š” ์ƒ๊ด€์—†์ด)skills_trees์†์— ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์žˆ๋Š”์ง€์˜ ์—ฌ๋ถ€์ด๋‹ค.
  • ๊ทธ๋ž˜์„œ skill_trees์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋Œ๋ฉด์„œ skillArr(skill์„ ๋ฐฐ์—ด๋กœ ์ชผ๊ฐœ์ค€ ๊ฒƒ)์˜ ์š”์†Œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ธ€์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ€์ง€๊ณ ์™€ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด(newStr)์„ ๋งŒ๋“ค์—ˆ๊ณ , ์ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด skill์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋˜‘๊ฐ™์ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ด ๋‘ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ–ˆ๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ๋‚ด์žฅ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฐ๋‹ฌ์•„์„œ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒƒ์ด ๊ฑฐ์˜ ์ฒ˜์Œ์ด๋‹ค. ๋ฐฐ์—ด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž˜ ์ตํ˜€๋‘๋ฉด ์ฝ”๋“œ ๊ธธ์ด๋„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ์ƒ๋‹นํžˆ ํŽธ๋ฆฌํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ฑธ ๋Š๊ผˆ๋‹ค. ํŠนํžˆ๋‚˜ ์ผ์ผ์ด ์š”์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ ์ž ํ–ˆ์—ˆ๋˜ ์ฒ˜์Œ ๊ณ„ํš์„ filter()๋ฉ”์†Œ๋“œ๋กœ ๋’ค์—Ž์„ ์ˆ˜ ์žˆ์–ด์„œ ์ฆ๊ฑฐ์› ๋‹ค.
newStr = str.split("").filter(el => skillArr.includes(el)).join("");
  • filter()๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์š”์†Œ๋“ค๋งŒ ๊ฑธ๋Ÿฌ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ˆœ์„œ๋„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜์ด ๋œ๋‹ค๋Š” ์  ๊ธฐ์–ตํ•˜๊ธฐ!
profile
ํ”„๋ฆฐ์ด์˜ ์ฝ”๋ฌป์€ ์ฝ”๋“œ๊ฐ€ ์Œ“์ด๋Š” ๊ณต๊ฐ„

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