๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] ์Šคํ‚ฌํŠธ๋ฆฌ (49993)

๋ฌธ์ œ๋งํฌ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์Šคํ‚ฌํŠธ๋ฆฌ

 

programmers.co.kr

 

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

๋‚˜์˜ ํ’€์ด 

์กฐ๊ฑด๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
1. skillTree์˜ ๋ฐฐ์—ด์ด ์„ ํ–‰ ์Šคํ‚ฌ์„ ํฌํ•จํ• ๋•Œ (skillTree.includes(skill[i-1])
1. 1 skillTree์—์„œ ์„ ํ–‰ ์Šคํ‚ฌ๋ณด๋‹ค ๋‹ค์Œ ์Šคํ‚ฌ์˜ index๋ฒˆํ˜ธ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๋‹ค์Œ ์Šคํ‚ฌ์ด ์—†์„ ๋•Œ
=> isRightSkillTree = true;
1. 2 skillTree์—์„œ ์„ ํ–‰ ์Šคํ‚ฌ๋ณด๋‹ค ๋‹ค์Œ ์Šคํ‚ฌ์˜ index ๋ฒˆํ˜ธ๊ฐ€ ์ž‘๊ณ  ๋‹ค์Œ ์Šคํ‚ฌ์ด ์žˆ์„ ๋•Œ
=> isRightSkillTree = false;

2. skillTree์˜ ๋ฐฐ์—ด์ด ์„ ํ–‰ ์Šคํ‚ฌ์„ ํฌํ•จํ•˜์ง€ ์•Š์„ ๋•Œ
2. 1 ์„ ํ–‰์Šคํ‚ฌ์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋ฐ, ๋‹ค์Œ ์Šคํ‚ฌ์€ ํฌํ•จํ•  ๊ฒฝ์šฐ
=> isRightSkillTree = false;
2. 2 skill์˜ ๋ชจ๋“  ์Šคํ‚ฌ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (์ˆœ์„œ๊ฐ€ ์—†๋Š” ์Šคํ‚ฌ๋“ค๋กœ๋งŒ ์ด๋ค„์ ธ ์žˆ์Œ)
=> isRightSkillTree = true;

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ์ด ์–ด๋””๊ฐ€ ์ž˜๋ชป๋๋Š”์ง€.. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 14๋ฒˆ๋งŒ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.



๊ทธ๋Ÿฐ๋ฐ ์˜ˆ์™ธ ์ผ€์ด์Šค๋ฅผ ์ฐพ๋‹ค๊ฐ€ ๋” ์ข‹์€ ํ’€์ด๋ฅผ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค.

์•„์ด๋””์–ด : ์Šคํ‚ฌํŠธ๋ฆฌ์—์„œ ์ˆœ์„œ๊ฐ€ ์—†๋Š” ์Šคํ‚ฌ๋“ค์€ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

filter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด skill_trees์— skill์— ์žˆ๋Š” ์Šคํ‚ฌ๋งŒ ์ถ”์ถœํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ํŒŒ์•…ํ•˜๋ฉด ๋œ๋‹ค.

 

 

// ๋” ์ข‹์€ ํ’€์ด

function solution(skill, skill_trees) {
    var answer = 0;
    const orderSkillTree = new Array(skill_trees.length).fill("");
    
    // skill_trees์˜ elements ์ค‘ skill์— ํฌํ•จ๋˜๋Š” elements๋งŒ ์ฐพ๋Š”๋‹ค.
    skill_trees.filter((skillTree,idx) => {
      for(let i = 0; i < skillTree.length; i++){
        if(skill.includes(skillTree[i])) orderSkillTree[idx] += skillTree[i]
      }
    })
    
    // ์ฐพ์€ orderSkillTree์™€ skill์˜ orderSkillTree์˜ ๊ธธ์ด ๋งŒํผ ์ž๋ฅธ substr์ด ๊ฐ™๋‹ค๋ฉด +1์„ ํ•œ๋‹ค.
    orderSkillTree.forEach(skillTree => {
        if(skillTree === skill.substring(0, skillTree.length)) answer += 1;
    })
    
    return answer;
}

 

 

// ๋‚˜์˜ ํ’€์ด

function solution(skill, skill_trees) {
    var answer = 0;
    let isRightSkillTree = false;

    skill_trees.forEach(skillTree => {
        for(let i = 1; i < skill.length; i++){
            // ์ด์ „ ์Šคํ‚ฌ์ด ์žˆ์„๋•Œ
            if(skillTree.includes(skill[i-1])){
                //์ด์ „ ์Šคํ‚ฌ๋ณด๋‹ค ๋‹ค์Œ ์Šคํ‚ฌ์˜ index๋ฒˆํ˜ธ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๋‹ค์Œ ์Šคํ‚ฌ์ด ์—†์„๋•Œ
                if(skillTree.indexOf(skill[i-1]) < skillTree.indexOf(skill[i]) || skillTree.indexOf(skill[i]) === -1){
                    isRightSkillTree = true;
                }
                // ์ด์ „ ์Šคํ‚ฌ๋ณด๋‹ค ๋‹ค์Œ ์Šคํ‚ฌ์˜ index๋ฒˆํ˜ธ๊ฐ€ ์ž‘๊ณ  ๋‹ค์Œ ์Šคํ‚ฌ์ด ์žˆ์„๋•Œ 
                else {
                    isRightSkillTree = false;
                    break;
                }
            }else{
                // ์ด์ „์Šคํ‚ฌ์€ ์—†๋Š”๋ฐ ๋‹ค์Œ ์Šคํ‚ฌ์€ ์žˆ์„๋•Œ 
                if(skillTree.includes(skill[i])){
                    isRightSkillTree = false;
                    break;
                }
                // skill๊ณผ ๊ฒน์น˜๋Š” ์Šคํ‚ฌ์ด ์—†์„๋•Œ (์ˆœ์„œ๊ฐ€ ์ƒ๊ด€์—†๋Š” ์Šคํ‚ฌ๋“ค๋งŒ ์กด์žฌ)
                isRightSkillTree = true;
            }
        }
        if(isRightSkillTree) answer += 1;
    })
    
    return answer;
}