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

์•Œ๊ณ ๋ฆฌ์ฆ˜(2) : ์ œ์ผ ์ž‘์€ ์ˆ˜ ์ œ๊ฑฐํ•˜๊ธฐ _ Lv.1

by oranssy 2022. 10. 31.
728x90
๋ฐ˜์‘ํ˜•

โญ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜(2) : ์ œ์ผ ์ž‘์€ ์ˆ˜ ์ œ๊ฑฐํ•˜๊ธฐ _ Lv.1 โญ๏ธ


01. ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ์ •์ˆ˜๋ฅผ ์ €์žฅํ•œ ๋ฐฐ์—ด, arr์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•œ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.
๐Ÿงฉ ๋‹จ, ๋ฆฌํ„ดํ•˜๋ ค๋Š” ๋ฐฐ์—ด์ด ๋นˆ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด์— -1 ์„ ์ฑ„์›Œ์„œ ๋ฆฌํ„ดํ•˜์„ธ์š”.
๐Ÿงฉ ์˜ˆ๋ฅผ ๋“ค์–ด arr์ด [4,3,2,1]์ธ ๊ฒฝ์šฐ๋Š” [4,3,2]๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , [10]์ด๋ฉด [-1]์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ”’ ์ œํ•œ ์กฐ๊ฑด : โ˜‘๏ธ arr์€ ๊ธธ์ด 1 ์ด์ƒ์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. โ˜‘๏ธ ์ธ๋ฑ์Šค i, j ์— ๋Œ€ํ•ด i ≠ j์ด๋ฉด arr[i] ≠ arr[j] ์ž…๋‹ˆ๋‹ค.

02. " solution.js " ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

๐Ÿ’ก ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ๊ณ , ์ฐพ์€ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ด๋ณด์ž.

const erase = [4, 3, 2, 1];

function solution(arr) {
    arr.splice( arr.findIndex( (a) => a == Math.min(...arr) ), 1 );

    return arr.length <= 1 ? arr = [-1] : arr;
}
console.log(solution(erase))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   Array.prototype.splice( ) : ๋ฐฐ์—ด์˜ ๊ธฐ์กด ์š”์†Œ๋ฅผ ์‚ญ์ œ ๋˜๋Š” ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฐ์—ด์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `2   Array.prototype.findIndex( ) : ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด -1 ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `3   Math.min( ) : ์ฃผ์–ด์ง„ ์ˆซ์ž๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `4   (... ) : ํŽผ์นจ์—ฐ์‚ฐ์ž โ˜› ๋ฐฐ์—ด ๋ณต์‚ฌ

03. ๋‹ค๋ฅธ ํ’€์ด ์•Œ์•„๋ณด๊ธฐ

# 1) Math.min( )๊ณผ filter( ), ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ํ™œ์šฉํ•˜๊ธฐ

const erase = [4, 3, 2, 1];

function solution(arr) {
    const min = Math.min(...arr);

    return arr.length !== 1 ? arr.filter( i => i !== min ) : [-1];
}
console.log(solution(erase))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   Array.prototype.filter( ) : ์ฃผ์–ด์ง„ ํ•จ์ˆ˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `2   ์กฐ๊ฑด(์‚ผํ•ญ) ์—ฐ์‚ฐ์ž : ์•ž์—์„œ๋ถ€ํ„ฐ ์กฐ๊ฑด๋ฌธ, ๋ฌผ์Œํ‘œ(?), ์กฐ๊ฑด๋ฌธ์ด ์ฐธ(truthy)์ผ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ํ‘œํ˜„์‹, ์ฝœ๋ก (:), ์กฐ๊ฑด๋ฌธ์ด ๊ฑฐ์ง“(falsy)์ผ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ํ‘œํ˜„์‹์ด ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

 

# 2) apply( )์™€ indexOf( ), if๋ฌธ ํ™œ์šฉํ•˜๊ธฐ

const erase = [4, 3, 2, 1];

function solution(arr) {
    let a = Math.min.apply( null, arr );
    arr.splice( arr.indexOf(a), 1 );

    if( arr[0] == undefined )
        return [-1];
    else
        return arr;
}
console.log(solution(erase))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   Function.prototype.apply( ) : ์ฃผ์–ด์ง„ this ๊ฐ’๊ณผ ๋ฐฐ์—ด๋กœ ์ œ๊ณต๋˜๋Š” arguments ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
                                                             ๋ฌธ๋ฒ• โ˜› func.apply(thisArg, [argsArray])
                                                             Math.min( )์˜ argument์—๋Š” ์ˆซ์ž๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, arguments๊ฐ€ ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” Nan ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
                                                             ์ด๋Š” apply( )๋ฅผ ๋ถ™์—ฌ์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. apply( )๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐฐ์—ด์„ ๋ฐ›๊ณ  ๊ณ„์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
                                                             Math.min( )์—์„œ๋Š” this ์—ญํ• ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— apply( )์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ null์„ ์ ์–ด์ค๋‹ˆ๋‹ค.
  `2   Array.prototype.indexOf( ) : ๋ฐฐ์—ด์—์„œ ์ง€์ •๋œ ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€