하루 알고리즘(JS)
[바미] 칸토어 집합
Bami
2024. 6. 14. 09:20
728x90
반응형
문제
https://www.acmicpc.net/problem/4779
코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
function generateCantorSet(N) {
if (N === 0) return '-';
const prevSet = generateCantorSet(N - 1);
const space = ' '.repeat(prevSet.length);
return prevSet + space + prevSet;
}
const results = input.map(line => {
const N = parseInt(line, 10);
return generateCantorSet(N);
});
console.log(results.join('\n'));
문제 해설
칸토어 집합을 재귀적으로 생성하는 문제를 해결하기 위해, 주어진 길이의 문자열을 3등분하고 가운데 부분을 공백으로 대체하는 작업을 반복적으로 수행합니다. 재귀 함수를 사용하여 간단하게 해결할 수 있습니다.
시간 복잡도
시간 복잡도는 알고리즘이 입력의 크기에 따라 얼마나 빠르게 실행되는지를 나타냅니다
각 단계에서 문자열의 길이는 3배가 되며, 재귀 호출을 통해 길이가 \(3^{N}\) 인 문자열을 만듭니다.
이 때 재귀 깊이는 𝑂(𝑁)이며, 각 호출에서 문자열을 합치는 작업이 수행됩니다.
따라서 전체 시간 복잡도는 \( O\left( 3^{N} \right) \)입니다.
공간 복잡도
공간 복잡도는 알고리즘이 얼마나 많은 메모리 공간을 사용하는지 나타냅니다.
각 단계에서 생성되는 문자열의 크기는 \(3^{N}\) 이므로, 전체 공간 복잡도는 \( O\left( 3^{N} \right) \)입니다.
728x90
반응형