์•Œ๊ณ ๋ฆฌ์ฆ˜(js)

34. ๋ฌธ์ž์—ด ๋‚ด ๋งˆ์Œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ

tnqlscho 95 2022. 11. 17. 23:13

๐Ÿ˜‡  ๋ฌธ์ œ

 

๐Ÿ™  ๋‹ต

function solution(strings, n) {
    
    strings.sort(function(a,b){
        let first = a[n];
        let second = b[n];
        
        if(first == second){
            return (a>b) - (a<b)
        }
        else{
            return (first>second) - (first<second)
        }
    })
    
    return strings;
}

 


๐Ÿ‘€ sort์˜ ์ž์„ธํ•œ ์„ค๋ช… ( ์ถœ์ฒ˜ : https://opentutorials.org/course/50/109)

๋”๋ณด๊ธฐ

๊ตฌ์ฒด์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดˆ์‹ฌ์ž๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ
์ด๊ณ ์ž‰๋‹˜๊ป˜์„œ ์ผ๋ถ€๋Ÿฌ ์„ค๋ช…์„ ์Šคํ‚ตํ•˜์‹  ๊ฒƒ ๊ฐ™์€๋ฐ...
๋ฐ‘์— ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์–ด ์ œ๊ฐ€ ๊ตณ์ด ์„ค๋ช…์„ ๋ณดํƒญ๋‹ˆ๋‹ค.

์šฐ์„  [20, 10, 9,8,7,6,5,4,3,2,1]์˜ ๋ฐฐ์—ด์—์„œ a-b๋ผ๋Š” ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ํ•œ ๋‹ค์Œ
๊ทธ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฒฐ์ฝ” ์•„๋‹™๋‹ˆ๋‹ค.
๋ญํ•˜๋Ÿฌ ๊ตณ์ด ๋บ„์…ˆ์„ ํ•˜๊ณ  ๊ทธ ๊ฐ’์œผ๋กœ ๋˜ ์ •๋ ฌํ•˜๊ฒ ์Šต๋‹ˆ๊นŒ?

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

(a,b) ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•œ ๋‘ ์ธ์ž๋ฅผ ์ฐจ๋ก€๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

์šฐ์„  ๋ฐฐ์—ด numbers[0]๊ณผ numbers[1] ์ฆ‰, 20๊ณผ 10์„ ๋น„๊ตํ•ด ๋ณผ๊นŒ์š”?
20-10 = 10
๊ฒฐ๊ณผ๊ฐ’์ด 10 ์ฆ‰, ์–‘์ˆ˜์ž…๋‹ˆ๋‹ค.
sortํ•จ์ˆ˜์— sortNumber(a,b)์˜ return ๊ฐ’์œผ๋กœ ์–‘์ˆ˜ 10์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ sortํ•จ์ˆ˜๊ฐ€ ์–‘์ˆ˜๊ฐ’์„ ์ „๋‹ฌ๋ฐ›๊ณ  ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
(์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋‘ ๋ฐฐ์—ด ์•ˆ์— ๋“  ๊ฐ’์„ ๊ต์ฒด)
๊ทธ๋Ÿผ ๋ฐฐ์—ด์ด [10, 20, 9,8,7,6,5,4,3,2,1] ์ด๋ ‡๊ฒŒ ๋ฐ”๋€๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ numbers[0]๊ณผ numbers[2] ์ฆ‰ 10๊ณผ 9๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. 10 - 9 = 1 >0, ์–‘์ˆ˜์ž…๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ๊ฐ’์ด ์–‘์ˆ˜์ด๋ฏ€๋กœ ๋˜ 10๊ณผ 9์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ๊ณ„์† ๋‘ ์ธ์ž๋ฅผ ๋น„๊ตํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’์ด ์–‘์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๊ณ ,
์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ์ˆœ์„œ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์ด ๋ฐ”๋€Œ์–ด๊ฐ€๋Š” ์ˆœ์„œ๋ฅผ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

[(20), (10), 9,8,7,6,5,4,3,2,1] 20-10 = 10, ์ฆ‰ ์–‘์ˆ˜์ด๋ฏ€๋กœ ์ˆœ์„œ๋ฐ”๋€œ! ()๋Š” ๋น„๊ต๋˜๋Š” ์ธ์ž๊ฐ’.
[(10), 20, (9),8,7,6,5,4,3,2,1] 10 - 9 = 1 ๋˜ ์–‘์ˆ˜, ์ˆœ์„œ ๋ฐ”๋€œ.
[(9), 20, 10, (8),7,6,5,4,3,2,1] ๋ฐ˜๋ณต...
[(8), 20, 10, 9,(7)...]
...
[(2). 20, 10...3, (1)]
[(1), 20, 10...]

๊ทธ๋Ÿผ ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ 1์ด ์ฐพ์•„์ง€๊ฒ ์ฃ .

[1, 20, 10, 9,8,7,6,5,4,3,2]

1์˜ ์ˆœ์„œ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 1-2 = -1
์ฆ‰ ๊ฒฐ๊ณผ๊ฐ’์ด ์Œ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

๊ทธ ๋‹ค์Œ์€ ๋‘๋ฒˆ์งธ ๋ฐฐ์—ด ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.
20 - 10 = 10 > 0 ์ด๋ฏ€๋กœ ์ˆœ์„œ๋ฅผ ๋˜ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

[1, (20), (10), 9,8,7,6,5,4,3,2]
[1, (10), 20, (9), 8...]
[1, (9), 20, 10, (8)...]

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋‹ค ๋ณด๋ฉด ๋‘๋ฒˆ์งธ๋กœ ์ž‘์€ ๊ฐ’ 2๋„ ์ฐพ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

....
[1, 2, 20, 10, 9,8,7,6,5,4,3]

๊ทธ๋Ÿผ ๋‹ค์Œ์€ ์„ธ๋ฒˆ์งธ...
์ด๋ ‡๊ฒŒ ์ง€๋ฃจํ•˜๊ฒŒ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ฒฐ๊ตญ ์ •๋ ฌ์ด ๋ฉ๋‹ˆ๋‹ค.

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

์ด๋ ‡๊ฒŒ ์ฐจ๋ก€์ฐจ๋ก€ ๋น„๊ตํ•ด ๋‚˜๊ฐ€๋ฉด ์ธ๊ฐ„์ด ์ดํ•ดํ•˜๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ
์—ฐ์‚ฐ๋Ÿ‰์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์“ฐ๋Š” ๊ฒƒ์ด์ฃ .

์‹ค์ œ๋กœ๋Š”
[20, 10, 9,8,7,6,5,4,3,2,1]
๋ฐฐ์—ด์˜ ์–‘์ชฝ ๋๋ถ€ํ„ฐ ๋น„๊ตํ•˜๊ณ  (20, 1),
๊ทธ ๋‹ค์Œ ๋ฐฐ์—ด์˜ ๊ฐ€์šด๋ฐ ๊ฐ’์„ ์ฐจ๋ก€๋กœ ๋น„๊ตํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. (1,6)
๋””๋ฒ„๊น…ํ•ด ๋ณด์‹œ๋ฉด ์‰ฝ๊ฒŒ ์•„์‹ค ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค