Studying/Algorithms

[알고리즘 떠먹여 주는 남자] 백준 8393 - 합 for Node.js

국장 지킴이 앨런 2022. 4. 4. 22:39
반응형

안녕하세요! 알고리즘 풀이 연습 중 반복문 기초 문제를 하나 풀었는데 물론 간단한 문제이지만 좋아 보여서 이렇게 포스팅 하게 되었습니다.

https://www.acmicpc.net/problem/8393

 

8393번: 합

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

www.acmicpc.net

문제

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

출력

1부터 n까지 합을 출력한다.

예제 입력 1 복사

3

예제 출력 1 복사

6
문제풀이

기초적인 반복문 문제로 for 혹은 while 루프를 사용하여 간단하게 풀 수 있지만, 저는 재귀함수 (recursive function) 을 이용하여 풀어 보았습니다. 거두절미하고 바로 코드 예제로 넘어가 보도록 하겠습니다.

// for loop 를 이용한 풀이
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : `${__dirname}/input.txt`;
const input = Number(fs.readFileSync(filePath).toString().trim());

let sum = 0;

for (let idx = 1; idx <= input; idx++) {
  sum += idx;
}

console.log(sum);
// 재귀함수 (recursive function) 을 이용한 풀이
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : `${__dirname}/input.txt`;
const input = Number(fs.readFileSync(filePath).toString().trim());

function sum(num) {
  if (num === 0) return 0;
  return num + sum(num - 1);
}

console.log(sum(input));
실행 결과

실행 결과를 보시면 처음 제출 (23분 전) 이 반복문을 사용한 제출이고, 두번째 제출이 재귀 함수를 사용하여 제출한 결과값입니다.

 

너무 간단한 문제여서 포스팅을 할까 말까 고민했지만, "고민될 땐 하자" 라는 생각을 가지고 있기도 하고, 저는 아직도 재귀 함수를 적용하는 것이 익숙하지 않습니다. 그리하여 연습해보자 하는 마음으로 재귀 함수로 문제를 풀어보았습니다.

 

재귀 함수를 사용할 때에 한가지 명심해야 할 것은 반드시 탈출 조건문을 넣어주어야 한다는 것입니다. 그렇지 않으면 무한 루프를 돌기 때문에 "call stack exceeded" 등의 에러가 발생하게 됩니다.

 

꾸준히 정진해서 재귀 함수를 사용하는 데에 더욱 익숙해 졌을 때 재귀 함수에 대한 포스팅을 해보도록 하겠습니다. 다들 열공!! 🔥

반응형