๐Ÿ”ข[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์—ฐ์†๋œ ์ˆ˜์˜ ํ•ฉ

Chobbyยท2022๋…„ 10์›” 23์ผ
1

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
141/345

๐Ÿงก๋ฌธ์ œ ์„ค๋ช…

์—ฐ์†๋œ ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ๋”ํ•ด 12๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” 3, 4, 5์ž…๋‹ˆ๋‹ค. ๋‘ ์ •์ˆ˜ num๊ณผ total์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์—ฐ์†๋œ ์ˆ˜ num๊ฐœ๋ฅผ ๋”ํ•œ ๊ฐ’์ด total์ด ๋  ๋•Œ, ์ •์ˆ˜ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‹ด์•„ returnํ•˜๋„๋ก solutionํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”.


๐Ÿ’›์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค num โ‰ค 100
  • 0 โ‰ค total โ‰ค 1000
  • num๊ฐœ์˜ ์—ฐ์†๋œ ์ˆ˜๋ฅผ ๋”ํ•˜์—ฌ total์ด ๋  ์ˆ˜ ์—†๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ’š์ž…์ถœ๋ ฅ ์˜ˆ

numtotalresult
312[3, 4, 5]
515[1, 2, 3, 4, 5]
414[2, 3, 4, 5]
55[-1, 0, 1, 2, 3]

๐Ÿ’™์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • num = 3, total = 12์ธ ๊ฒฝ์šฐ [3, 4, 5]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • num = 5, total = 15์ธ ๊ฒฝ์šฐ [1, 2, 3, 4, 5]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • 4๊ฐœ์˜ ์—ฐ์†๋œ ์ˆ˜๋ฅผ ๋”ํ•ด 14๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” 2, 3, 4, 5์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #4

  • ์„ค๋ช… ์ƒ๋žต

๐Ÿ’œ๋‚˜์˜ ํ’€์ด

function solution(num, total) {
    let startNum = 0
    // ์ดˆ๋ฐ˜ [0~num]์˜ ๋ฐฐ์—ด์„ ์ƒใ……์–ด
    let twoPointer = new Array(num).fill(0).map((a,i) => i).reduce((a,b) => a+b, 0)
    // ๋ฐฐ์—ด์ด total๊ณผ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while(twoPointer !== total) {
        // ํ˜„์žฌ ๋ฐฐ์—ด์˜ ํ•ฉ์ด total๋ณด๋‹ค ์ž‘๋‹ค๋ฉด +1
        if(twoPointer < total) {
            startNum++
        // ํฌ๋‹ค๋ฉด -1
        } else {
            startNum--
        }
        // ๋ณ€๊ฒฝ๋œ startNum์— ๋”ฐ๋ฅธ ๋ฐฐ์—ด์˜ ํ•ฉ ๊ณ„์‚ฐ
        twoPointer = new Array(num).fill(0).map((a,i) => i+startNum).reduce((a,b) => a+b, 0)
    }
    return new Array(num).fill(0).map((a,i) => i+startNum)
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

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