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

[Algorithm] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.1 : ์‚ผ์ด์‚ฌ

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 12. 1.
๋ฐ˜์‘ํ˜•

์‚ผ์ด์‚ฌ

ํ•œ๊ตญ์ค‘ํ•™๊ต์— ๋‹ค๋‹ˆ๋Š” ํ•™์ƒ๋“ค์€ ๊ฐ์ž ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•™๊ต ํ•™์ƒ 3๋ช…์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋”ํ–ˆ์„ ๋•Œ 0์ด ๋˜๋ฉด 3๋ช…์˜ ํ•™์ƒ์€ ์‚ผ์ด์‚ฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋ช…์˜ ํ•™์ƒ์ด ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ -2, 3, 0, 2, -5์ผ ๋•Œ, ์ฒซ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ ํ•™์ƒ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋”ํ•˜๋ฉด 0์ด๋ฏ€๋กœ ์„ธ ํ•™์ƒ์€ ์‚ผ์ด์‚ฌ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‘ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ, ๋‹ค์„ฏ ๋ฒˆ์งธ ํ•™์ƒ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋”ํ•ด๋„ 0์ด๋ฏ€๋กœ ์„ธ ํ•™์ƒ๋„ ์‚ผ์ด์‚ฌ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ ํ•œ๊ตญ์ค‘ํ•™๊ต์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ผ์ด์‚ฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๊ตญ์ค‘ํ•™๊ต ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด number๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ํ•™์ƒ๋“ค ์ค‘ ์‚ผ์ด์‚ฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.


์ œํ•œ ์กฐ๊ฑด

* 3 โ‰ค number์˜ ๊ธธ์ด โ‰ค 13
* -1,000 โ‰ค number์˜ ๊ฐ ์›์†Œ โ‰ค 1,000
* ์„œ๋กœ ๋‹ค๋ฅธ ํ•™์ƒ์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
ํ•™์ƒ๋“ค์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ ์Œ (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) ์ด ์‚ผ์ด์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 5๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3
์‚ผ์ด์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

number result
[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

๋ฌธ์ œ ํ’€์ด

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋Œ๋ฉฐ 3๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์กฐํ•ฉํ•œ ๋ฐฐ์—ด์˜ ํ•ฉ์ด 0์ผ ๊ฒฝ์šฐ์— answer์— 1์„ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

function solution(number) {
    var answer = 0;
    
    const combination = (current, start) => {
        if (current.length === 3) {
            answer += current.reduce((acc, cur) => acc + cur, 0) === 0 ? 1 : 0;
            return;
        }

        for (let i = start; i < number.length; i++) {
            combination([...current, number[i]], i + 1);
        }
    }
    combination([], 0);
    
    return answer;
}

๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ์‹

for๋ฌธ์„ 3๊ฐœ ์ด์šฉํ•˜์—ฌ ๊ฐ๊ฐ number๋ฅผ ์ „์ฒด์ ์œผ๋กœ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. 3๊ฐœ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด 0์ด ๋‚˜์˜ฌ ๊ฒฝ์šฐ์— answer๊ฐ€ 1 ์ฆ๊ฐ€๋˜๋Š” ๋ฐฉ์‹.

function solution(number) {
    let answer = 0;
    
    for(let i = 0; i < number.length-2; i++) {
        for(let j = i+1; j < number.length-1; j++) {
            for(let k = j+1; k < number.length; k++) {
                if(number[i] + number[j] + number[k] === 0) {
                    answer++;
                }
            }
        }
    }
    
    return answer;
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.