๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] 2019 KAKAO BLIND RECRUITMENT ๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„

by Fomagran ๐Ÿ’ป 2021. 6. 11.
728x90
๋ฐ˜์‘ํ˜•

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„

[[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]]

programmers.co.kr


Solution

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” "์ด์ง„ํŠธ๋ฆฌ " ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

 

1. ์ดˆ๊ธฐ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋“ค์„ ์„ธํŒ…ํ•ด์ค๋‹ˆ๋‹ค.

 

//๋ถ€๋ชจ์™€ ์ž์‹์„ ๋‹ด์„ ์ด์ค‘๋ฐฐ์—ด
var parentsChildren:[[Int]] = Array(repeating: [], count: nodeinfo.count + 1)
//๊ฐ ๋…ธ๋“œ์˜ ๋ฒ”์œ„๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด
var ranges = Array(repeating: [ClosedRange<Int>](), count: nodeinfo.count + 1)
//์ „์œ„์ˆœํšŒ ๋‹ด์„ ๋ฐฐ์—ด
var preorder:[Int] = []
//ํ›„์œ„์ˆœํšŒ๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด
var postorder:[Int] = []
//๊ฐ€์žฅ ๋†’์€ ๋ ˆ๋ฒจ
let maxLevel:Int = nodeinfo.max{$0[1] < $1[1]}?[1] ?? 0
//๋ ˆ๋ฒจ์— ๋…ธ๋“œ๋“ค์˜ ๋‹ด์„ ๋ฐฐ์—ด
var levels = Array(repeating:[Int](), count: 1000)

 

2. ๋ ˆ๋ฒจ์— ๋งž์ถฐ ๋…ธ๋“œ๋“ค์„ ์„ธํŒ…ํ•ด์ค๋‹ˆ๋‹ค.

 

๊ฐ ๋…ธ๋“œ์˜ y๊ฐ’์„ levels์˜ ์ธ๋ฑ์Šค๋กœ ๋…ธ๋“œ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

(์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ setLevelsNode ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

 

3. ๋ ˆ๋ฒจ๊ณผ ๋ฒ”์œ„์— ๋งž์ถฐ ๋ถ€๋ชจ์™€ ๊ฐ ์ž์‹๋“ค์„ ์„ธํŒ…ํ•ด์ค๋‹ˆ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ๋…ธ๋“œ๋“ค์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ–ˆ๋‹ค๋ฉด ์ด์ œ ์ž์‹๋“ค์„ ์„ธํŒ…ํ•ด์•ผํ•˜๋Š”๋ฐ์š”.

 

 

 

์—ฌ๊ธฐ์„œ ์ €๋Š” 5๋ฒˆ์ด ๋ˆ„๊ตฌ์˜ ์ž์‹์ด ๋˜์•ผํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ์š”.

 

์ด๋ ‡๊ฒŒ 9๋ฒˆ์˜ ์ž์‹์ด ๋  ์ˆ˜๋„ ์žˆ๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ์ž์‹์„ ์ •ํ•ด์•ผํ•˜ ํ•˜์ง€? ํ•˜๋‹ค๊ฐ€

 

 

์•„ ๊ฐ€์žฅ ๋ถ€๋ชจ ๋ ˆ๋ฒจ์˜ ์žˆ๋Š” ๋…ธ๋“œ์˜ x ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ๋˜๋Š”๊ตฌ๋‚˜!

 

๋ผ๊ณ  ํ’€์—ˆ๋”๋‹ˆ 34.5์ ์ด ๋‚˜์˜ค๋”๋ผ๊ตฌ์š”....

 

๊ทธ๋ž˜์„œ ์นด์นด์˜ค ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ์— ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์˜ ์ž์‹์ด ๊ฒฐ์ •๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค..

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๋กœ ์•„๋ž˜ ๋ ˆ๋ฒจ์ด๋ฉด์„œ ์™ผ์ชฝ์— ์žˆ๋Š” 4๋ฒˆ์ด ์™ผ์ชฝ ์ž์‹์ด ๋˜๋Š” ๊ฒƒ์ด๊ณ  ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” 2๋ฒˆ์ด ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ๋ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ 4๋ฒˆ ์•„๋ž˜ 1๋ฒˆ์€ 4๋ฒˆ๊ณผ 2๋ฒˆ ์ค‘ ์™ผ์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ๋˜๋ฏ€๋กœ 2๋ฒˆ์˜ ์ž์‹์ด ๋  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์ฃ !

 

 

๊ฐ™์€ ์›๋ฆฌ๋กœ 5๋ฒˆ์ด 9๋ฒˆ์˜ ์ž์‹์ด ๋  ์ˆ˜ ์—†๊ณ  8๋ฒˆ์˜ ์ž์‹์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

์ž์‹์˜ ์™ผ์ชฝ ๋ฒ”์œ„๋Š” ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ๋ฒ”์œ„๋ถ€ํ„ฐ ํ˜„์žฌ ์ž์‹์˜ x ๊นŒ์ง€ ์˜ค๋ฅธ์ชฝ ๋ฒ”์œ„๋Š” ํ˜„์žฌ์˜ x๋ถ€ํ„ฐ ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ๋ฒ”์œ„๊นŒ์ง€๋กœ ์„ธํŒ…ํ•ด์ค๋‹ˆ๋‹ค.

 

( ์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ setParentsChilren์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

 

4. ์ „์œ„ ์ˆœํšŒํ•œ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

 

์œ„์—์„œ ์ž์‹๊ณผ ๋ถ€๋ชจ๋ฅผ ์„ธํŒ…ํ•œ ๋ฐฐ์—ด์„ DFS ๋ฐฉ์‹์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋“ค์„ ๋‹ด์•„์ค๋‹ˆ๋‹ค.

 

(์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ searchPreorder๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

 

5. ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

 

DFS์™€๋Š” ์ •๋ฐ˜๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ ๋งจ ๋ ๋ฆฌํ”„๋…ธ๋“œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์™ผ์ชฝ ๋งจ ์œ„ ๋ฃจํŠธ ๋…ธ๋“œ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋“ค์„ ๋‹ด์•„์ค๋‹ˆ๋‹ค.

 

(์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ searchPostorder๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

 

6. ์ „์œ„ ์ˆœํšŒํ•œ ๊ฐ’๊ณผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.


Source Code

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€