๐Ÿ“’ Algorithm

[์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ] ๋ฌธ์ œ 26 ํŠธ๋ฆฌ ์ˆœํšŒ

s2ylvia 2024. 9. 4. 19:31

๋ฌธ์ œ ์„ค๋ช…

์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ํ‘œํ˜„ํ•œ ๋ฐฐ์—ด node๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ nodes๊ฐ€ [1,2,3,4,5,6,7]์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ๋ฅผ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ด์ง„ ํŠธ๋ฆฌ์— ๋Œ€ํ•˜์—ฌ ์ „์œ„ ์ˆœํšŒ, ์ค‘์œ„ ์ˆœํšŒ, ํ›„์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” solution()ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”.

 

์ œ์•ฝ ์กฐ๊ฑด

  • ์ž…๋ ฅ ๋…ธ๋“œ๊ฐ’์˜ ๊ฐœ์ˆ˜๋Š” 1๊ฐœ ์ด์ƒ 1000๊ฐœ ์ดํ•˜์ด๋‹ค.
  • ๋…ธ๋“œ๊ฐ’์€ ์ •์ˆ˜ํ˜•์ด๋ฉฐ, ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

์ž…์ถœ๋ ฅ์˜ ์˜ˆ

nodes return
[1,2,3,4,5,6,7] ["1 2 4 5 3 6 7", "4 2 5 1 6 3 7", "4 5 2 6 7 3 1"]

 

์ •๋‹ต

const preorder(nodes, idx){
	//์ „์œ„์ˆœํšŒ(๋ถ€์™ผ์˜ค)
    if(idx < nodes.length){
    	//๋…ธ๋“œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ณด๋‹ค ์ธ๋ฑ์Šค๊ฐ€ ์ž‘์„๋•Œ
        let ret = `${nodes[idx]}`; //๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ถœ๋ ฅํ•œ๋‹ค.(๋ถ€)
        ret += preorder(nodes, idx * 2 + 1) //์ธ๋ฑ์Šค๋กœ ๋Œ๋ฆฌ๋‹ˆ๊น ์›๋ž˜๋Š” ์™ผ์ชฝ์ด i*2์ด์ง€๋งŒ i*2+1๋กœ(์™ผ)
        ret += preorder(nodes, idx * 2 + 2) //์ด๊ฒƒ๋„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ i*2+1์ด์ง€๋งŒ i*2+2(์˜ค)
        return ret;
    }
    
    //idx๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด ๋นˆ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
    return "";
} 

const inorder(nodex,idx){
	//์ค‘์œ„์ˆœํšŒ(์™ผ๋ถ€์˜ค)
    if(idx < nodes.length){
    	let ret = inorder(nodes, idx*2+1);
        ret += `${nodes[idx]}`;
        ret += inorder(nodes, idx*2+2);
        return ret;
    }
    
    return "";
}

const postorder(nodes,idx){
	//ํ›„์œ„์ˆœํšŒ(์™ผ์˜ค๋ถ€)
    if(idx < nodes.length){
    	let ret = postorder(nodes, idx*2+1);
        ret += postorder(nodes, idx*2+2);
        ret += `${nodes[idx]}`;
        return ret;
    }
    
    return "";
}

solution(nodes){
	//slice๋Š” ๋งˆ์ง€๋ง‰ ๊ณต๋ฐฑ ์ œ๊ฑฐ
	return [preorder(nodes,0).slice(0,-1),inorder(nodes,0).slice(0, -1),postorder(nodes,0).slice(0,-1)];
}