※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4779번 문제인 칸토어 집합이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4779
4779번: 칸토어 집합
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고,
www.acmicpc.net
N번째 문자열이 어떻게 만들어지는지 규칙을 관찰하자.
N번째 문자열의 앞뒤에 N-1번째 문자열과 같은 문자열이 하나씩 붙어있는 것이 눈에 띈다.
또한, 두 N-1번째 문자열 사이에는 그 문자열의 길이와 같은 개수의 공백이 들어있는 것도 알 수 있다.
따라서 (N번째 문자열) = (N-1번째 문자열) + (N-1번째 문자열의 길이와 같은 개수의 공백) + (N-1번째 문자열)이 됨을 관찰할 수 있다.
이를 반복문으로 구현하여 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string s[13];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
s[0] = "-";
for (int i = 1; i <= 12; i++) {
int slen = s[i - 1].length();
while (slen--) s[i] += " ";
s[i] = s[i - 1] + s[i] + s[i - 1];
}
int x;
while (cin >> x) cout << s[x] << '\n';
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 10244 // C++] 최대공약수들 (0) | 2021.11.29 |
---|---|
[BOJ 11414 // C++] LCM (0) | 2021.11.28 |
[BOJ 17829 // C++] 222-풀링 (0) | 2021.11.26 |
[BOJ 4386 // C++] 별자리 만들기 (0) | 2021.11.25 |
[BOJ 2448 // C++] 별 찍기 - 11 (0) | 2021.11.24 |