Skip to content

[Note] ๊ผฌ๋ฆฌ์žฌ๊ท€ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๊ณ ์ฐฐย #2

@saseungmin

Description

@saseungmin
function solution(n) {
  if (n > 20) {
    return false;
  }

  if (n < 1) {
    return 0;
  }

  return n + solution(n - 1);
}
  • ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ์žฌ๊ท€๋ฅผ ํ•˜๋ฉด ์•„์ง ์—ฐ์‚ฐ์ด ์•ˆ ๋๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ์Šคํƒ์ด ์‹ธ์ด๋ฉด ๋‹น์—ฐํžˆ ์Šคํƒ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์—ฐ์‚ฐ์ด ์•ˆ๋๋‚˜๋Š” ์žฌ๊ท€๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฅผ ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด๋ดค๋‹ค. ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์‚ฐ์ด ์ข…๋ฃŒ๋˜๊ณ  ๋‹ค์Œ ์—ฐ์‚ฐ์ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋‹ค๋งŒ, ํ˜„์žฌ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—†๋‹ค.. ๋ญ.. Firefox์—์„œ๋งŒ ์ง€์›ํ•œ๋‹ค๊ณ ๋Š” ํ•˜๋Š”๋ฐ.. ์ด ๋งˆ์ €๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์•ˆ๋œ๋‹ค๋Š” ์†Œ๋ฆฌ๋ฅผ ๋“ค์—ˆ๋‹ค.
  • ์–ด์จŒ๋“  ๊ทธ๋ƒฅ ์ €๋ ‡๊ฒŒ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์—๋Š” ์ข‹๊ฒ ์ง€๋งŒ, ๊ทธ๋ƒฅ ๋ฐ˜๋ณต์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑฐ ๋ณด๋‹ค ์„ฑ๋Šฅ์— ์žˆ์–ด์„œ๋Š” ์ข‹์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ๋ฐ˜๋ณต์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณธ์ ์ด ์—†์–ด์„œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ผ ํ•œ ๋ฒˆ์ฏค์€ ์‹œ๋„ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์•„๋ž˜์™€ ๊ฐ™์ด ๊ผฌ๋ฆฌ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ ์šฉํ–ˆ์„ ๋•Œ๋Š” ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์„ฑ๊ณผ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•˜๋‚˜๋งŒ ๋„˜๊ธฐ์ง€๋งŒ ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฅผ ํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์ปค๋ง์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‘ ๊ฐœ๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฅผ ์ ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋…์„ฑ๋„ ์ข‹๊ณ  ์„ฑ๋Šฅ ๋˜ํ•œ ๊ฐ™๋‹ค.
  • ๊ผฌ๋ฆฌ์žฌ๊ท€๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์‹œ ๋ฐ˜๋ณต๋ฌธ(for)์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ดค์„ ๋•Œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ๊ผฌ๋ฆฌ์žฌ๊ท€๊ฐ€ ์ž˜ ๋˜์—ˆ๋‹ค๋Š” ์ฆ๊ฑฐ์ด๋‹ค. ๋งŒ์•ฝ, ๊ผฌ๋ฆฌ์žฌ๊ท€๊ฐ€ ์•ˆ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ณ€๊ฒฝํ•ด๋ณด๋Š” ๊ฑด ์ข€ ๋” ๊ณ ๋ฏผํ•ด๋ด์•ผ๊ฒ ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•ด๋ณด๋ผ๋Š”๊ฑด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.
function solution(n) {
  return function (acc = 0) {
    if (n > 20) {
      return false;
    }

    if (n < 1) {
      return acc;
    }

    return solution(n - 1)(acc + n);
  };
}

test('Should return the sum from 1 to n', () => {
  expect(solution(6)()).toBe(21);
  expect(solution(10)()).toBe(55);
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions