| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 백트래킹
- dropout
- 자바스크립트
- 너비 우선 탐색
- Overfitting
- 미래는_현재와_과거로
- 가끔은 말로
- back propagation
- 회고록
- NEXT
- 조합론
- 알고리즘
- 분할 정복
- 가끔은_말로
- 세그먼트 트리
- 2023
- lazy propagation
- BFS
- object detection
- 문자열
- 이분 탐색
- 크루스칼
- DP
- tensorflow
- pytorch
- 다익스트라
- 플로이드 와샬
- 우선 순위 큐
- c++
- dfs
Archives
- Today
- Total
Doby's Lab
백준 4779번: 칸토어 집합 (C++) 본문
https://www.acmicpc.net/problem/4779
4779번: 칸토어 집합
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고,
www.acmicpc.net
Solved By: Divide & Conquer
이러한 출력 문제는 (별 찍기와 비슷함) 어떻게 작동해야 할지는 알겠으나 코드로 짜기는 어렵습니다.
다음 Recursive Call에서 어떤 Parameter로 넘겨주어야 하는지가 제일 까다롭습니다.
항상 별찍기 문제들에서나 실수하던 부분을 이번 문제에서도 실수했었습니다.
Divide & Conquer
Parameter 실수에 대한 해결법은 항상 머리가 아닌 몇 개의 TC만 노트로 써봐도 풀린다.
#include <iostream>
#include <cmath>
using namespace std;
int n;
string s;
void dq(int N, int st, int en){
if(N == 1) return;
int n3 = N / 3;
for(int i = st; i < en; i++){
if(i >= st + n3 && i < st + 2 * n3) s[i] = ' ';
}
// key point
dq(n3, st, st + n3);
dq(n3, st + 2 * n3, st + 3 * n3);
}
int main(){
while(cin >> n){
s = "";
for(int i = 0; i < pow(3, n); i++){
s += '-';
}
dq(pow(3, n), 0, pow(3, n));
cout << s << '\n';
}
return 0;
}
'PS > BOJ' 카테고리의 다른 글
| 백준 16563번: 어려운 소인수분해 (C++) (1) | 2022.08.01 |
|---|---|
| 백준 2857번: FBI (C++) (0) | 2022.07.30 |
| 백준 17362번: 수학은 체육과목 입니다 2 (Python) (0) | 2022.07.26 |
| 백준 13237번: Binary tree (C++) (0) | 2022.07.24 |
| 백준 2210번: 숫자판 점프 (C++) (0) | 2022.07.24 |
