06. sort

์–‘ํฌ์ค€ยท2021๋…„ 12์›” 5์ผ
0

JS Array Method

๋ชฉ๋ก ๋ณด๊ธฐ
6/7
post-thumbnail

๐Ÿ“Œ 6-1 sort๋ž€?

โœ” ๋ฐฐ์—ด.sort(์ฝœ๋ฐฑํ•จ์ˆ˜(compare(a,b)))
โœ” ๋ฐฐ์—ด์„ ์œ ๋‹ˆ์ฝ”๋“œ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โœ” ์ฝœ๋ฐฑํ•จ์ˆ˜์•ˆ์— a์™€ b๋ฅผ ์ž‘์„ฑํ•˜๋ฉด a์™€ b๋ฅผ ์œ ๋‹ˆ์˜จ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์„œ ๋น„๊ตํ•œ๋’ค ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โœ” ์› ๋ฐฐ์—ด์ด ์ •๋ ฌ๋œ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ 6-2 sort์˜ ์ž‘๋™์˜ˆ์ œ

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์œผ๋ฉด ์œ ๋‹ˆ์ฝ”๋“œ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.

const arr = ['A','D','B','C','Z','F'];
arr.sort(); // ์œ ๋‹ˆ์ฝ”๋“œ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ์‹œ์ž‘
console.log(arr); // [ 'A', 'B', 'C', 'D', 'F', 'Z' ] ์ถœ๋ ฅ

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ˆซ์žํ˜•์€ ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

const arr = [11, 7, 3, 19, 24];
arr.sort(); // ์œ ๋‹ˆ์ฝ”๋“œ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„ํŒŒ์ˆœ ์ •๋ ฌ ์‹œ์ž‘
console.log(arr); // [ 11, 19, 24, 3, 7 ] ์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ž๋ฆฌ๋ฅผ ๋จผ์ € ๋น„๊ต ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1 1 2 3 7 ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋œ๋‹ค.
ํ•˜์ง€๋งŒ 3์ด ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž์ด๋ฏ€๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

๐Ÿ“Œ 6-3 sort์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‚ฌ์šฉ

const arr = [11, 7, 3, 19, 24];
arr.sort((a,b) => a-b); // ์ˆซ์ž ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
console.log(arr); // [ 3, 7, 11, 19, 24 ] ์ถœ๋ ฅ

์ฝœ๋ฐฑํ•จ์ˆ˜์ด์šฉ ๋ฐฉ๋ฒ•์„ Mdn์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค.
์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ compare์ด๋ผ๊ณ  ์ง€์นญํ•˜์—ฌ ํ‘œํ˜„ํ–ˆ๋‹ค.

  1. compare(a, b)์—์„œ ๋ฐ˜ํ™˜๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด a๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  2. compare(a, b)์—์„œ ๋ฐ˜ํ™˜๊ฐ’์ด 0๋ณด๋‹ค ํฌ๋ฉด b๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค,
  3. compare(a, b)์—์„œ ๋ฐ˜ํ™˜๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
  4. ๋ชจ๋“  a์™€ b์—์„œ ๋ฐ˜ํ™˜ ์กฐ๊ฑด์ด ๋งŒ์กฑํ•  ๋•Œ ๊นŒ์ง€ ์•ž์ชฝ์—์„œ ํ™•์ธํ›„ ์ •๋ ฌํ•œ๋‹ค.
const arr = [11, 7, 3, 19, 24];
arr.sort((a,b) => b-a); // ์ˆซ์ž ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
console.log(arr); // [ 24, 19, 11, 7, 3 ]

์ž„์˜๋กœ 0๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ฐฐ์—ด์ด ๋ณ€ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

const arr = [11, 7, 3, 19, 24];
arr.sort((a,b) => 0); // 0์„ ๋ฐ˜ํ™˜
console.log(arr); // [ 11, 7, 3, 19, 24 ] ์ถœ๋ ฅ

์ด์ฒ˜๋Ÿผ 0์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์›๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

๐Ÿ“Œ 6-4 ๋‘๊ฐ€์ง€ ์ด์ƒ์˜ ์กฐ๊ฑด ์ •๋ ฌ

๋‚˜์ด์ˆœ์œผ๋กœ ๋จผ์ € ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•œ๋’ค ๋‚˜์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

const arr = [
    { firstName: 'Park', lastName: 'Sara', age: 18 },
    { firstName: 'Lee', lastName: 'Sin', age: 21 },
    { firstName: 'Kim', lastName: 'Song', age: 24 },
    { firstName: 'Son', lastName: 'San', age: 21 }
];
arr.sort((a, b) => {
  // 0์ผ๊ฒฝ์šฐ ๋‚˜์ด๊ฐ€ ๊ฐ™์Œ
    if(a.age - b.age === 0) {
      // ๋ฌธ์ž์—ด ์‚ฌ์ „์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜
        return a.firstName.localeCompare(b);
    } return a.age - b.age;
});
console.log(arr);

๐Ÿ’ก Str1.localeCompare(Str2)๋Š” ์‚ฌ์ „์ˆœ์„œ๋Œ€๋กœ Str1์ด ๋จผ์ € ์žˆ๋Š”๊ฒฝ์šฐ ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ ๋’ค์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–‘์ˆ˜๋ฐ˜ํ™˜ ๊ฐ™์„ ๊ฒฝ์šฐ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์ด ์žˆ์—ˆ๋„ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“Œ 6-5 ์„ ํƒ์ •๋ ฌ

sort๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •๋ ฌ์„ ํ•˜๋ฉด ํŽธํ•˜์ง€๋งŒ ์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ช‡๊ฐ€์ง€๋Š” ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์‹ถ์–ด์„œ ์ •๋ ฌ์„ ๊ณต๋ถ€ ํ•˜์˜€๋‹ค. ๊ทธ์ค‘ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์„ ํƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ์•„๋ณธ๋‹ค.

function selectionSort(arr) {
  // 2์ค‘ ํฌ๋ฌธ์œผ๋กœ ๋ฐฐ์—ดํƒ์ƒ‰ ์‹œ์ž‘
    for (let i = 0; i < arr.length - 1; i++) {
        let index = i;
        for (let j = i + 1; j < arr.length; j++) {
          // ํƒ์ƒ‰ ํ•˜๋˜ ๊ตฌ๊ฐ„์ค‘ ์ œ์ผ ํฐ ๊ฐ’์„ index์— ๋Œ€์ž…
            if(arr[j] < arr[index]) index = j;
        }
      // ์ง„ํ–‰์ค‘์ธ ๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด๋’ค์˜ ์ˆซ์ž๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.
        const [acc, curr] = [arr[i], arr[index]];
        arr[index] = acc;
        arr[i] = curr;
    }
    return arr;
}
console.log(selectionSort([5, 13, 11, 7, 23, 15])); // ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

๐Ÿ“Œ 6-6 ์ •๋ ฌ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

๋ฐฑ์ค€ ์ •๋ ฌ๋ฌธ์ œ(1431 : ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ)

function solution(arr) {
    let answer = '';
    // ์ •๋ ฌ์‹œ์ž‘
    arr.sort((a, b) => {
        // ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ์ž‘์€์ˆœ์„œ๋Œ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        if(a.length < b.length) {
            return a.length - b.length;
        }
        // ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        if(a.length === b.length) {
            // ๋ฌธ์ž์—ด ์•ˆ์— ์žˆ๋Š” ์ˆซ์ž๋“ค์˜ ํ•ฉ์ด ์ž‘์€์ˆœ๋Œ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
            const A = a.replace(/[a-z]/gi, "0").split('').map((item) => +item).reduce((acc, curr) => acc + curr);
            const B = b.replace(/[a-z]/gi, "0").split('').map((item) => +item).reduce((acc, curr) => acc + curr);
            // ์ˆซ์ž๋„ ๊ฐ™์œผ๋ฉด ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
            if(A === B) {
                return a.localeCompare(b);
            }
            return A - B;
        }
    });
    // ์ •๋‹ต ์ •์ œ
    for(let item of arr) {
        answer += item + '\n';
    }
    return answer.trim();
}
profile
JS ์ฝ”๋ฆฐ์ด

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