※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts