문제 해석
문제 풀이
보자마자 분할 정복인 것은 알았으나 분할정복을 제대로 이해하고 있지 않아서 선으로 문자열을 먼저 만들고 지워나가는 형식으로 구현하려고 했으나 어려워서 헤맸다. (개인적으로 분할정복이 제일 어렵다)
이 문제는 아래와 같은 패턴이다.
- N == 2는 N == 1을 2번 더하고 사이에 N==1 만큼의 공백이 있고 N==1은 N==0을 2번 더하고 사이에 공백이 N==0
만큼 존재한다. - 따라서 이전 것을 그리고 이전 사이즈만큼 공백을 그리고 이전 것을 그려주는 형식으로 분할하면 되는 문제이다.
- 정복할 때는 N == 0인 초기상태일 때 ' - ' 를 그린다.
코드
#include<bits/stdc++.h>
using namespace std;
int N ;
void Div_Con(int n) {
int str_sz = pow(3, n - 1) ;
if (n == 0)
{
cout << "-";
return;
}
Div_Con(n - 1) ;
for (int i = 0 ; i < str_sz ; i++)
cout << " " ;
Div_Con(n - 1) ;
}
int main()
{
while(cin >> N)
{
Div_Con(N) ;
cout << "\n" ;
}
}
느낀점: 분할정복 드릅게 어렵다. 그리디랑 dp는 점화식과 패턴을 못찾겠고 분할정복은 구현을 못하겠다..
참조: https://beginnerdeveloper-lit.tistory.com/141
문제링크: https://www.acmicpc.net/problem/4779
4779번: 칸토어 집합
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고,
www.acmicpc.net
'Problem Solving > 백준' 카테고리의 다른 글
[백준/C++] 1525번 퍼즐 풀이 (0) | 2023.04.03 |
---|---|
[백준/C++/USACO] 23879번 Air Cownditioning 풀이 (2) | 2023.03.29 |
[백준/C++] 19539번 사과나무 풀이 (0) | 2023.03.24 |
[백준/C++/KOI] 2470번 두 용액 이분탐색 풀이 (0) | 2023.03.23 |
[백준/C++/KOI] 2467번 용액 투포인터 풀이 (0) | 2023.03.23 |