반응형
안녕하세요! 알고리즘 풀이 연습 중 반복문 기초 문제를 하나 풀었는데 물론 간단한 문제이지만 좋아 보여서 이렇게 포스팅 하게 되었습니다.
https://www.acmicpc.net/problem/8393
문제
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" 등의 에러가 발생하게 됩니다.
꾸준히 정진해서 재귀 함수를 사용하는 데에 더욱 익숙해 졌을 때 재귀 함수에 대한 포스팅을 해보도록 하겠습니다. 다들 열공!! 🔥
반응형
'Studying > Algorithms' 카테고리의 다른 글
[알고리즘 떠먹여 주는 남자] 백준 1110 - 더하기 사이클 for Node.js (0) | 2022.04.05 |
---|---|
[알고리즘 떠먹여 주는 남자] 백준 15552 - 빠른 A + B for Node.js (0) | 2022.04.04 |
[알고리즘 떠먹여 주는 남자] 백준 1157 - 단어 공부 for Node.js (0) | 2022.04.04 |
[알고리즘 떠먹여 주는 남자] 백준 2525 - 오븐 시계 for Node.js (0) | 2022.04.03 |
[알고리즘 떠먹여 주는 남자] 백준 2884 - 알람 시계 for Node.js (0) | 2022.04.02 |