일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dropout
- 이분 탐색
- 가끔은 말로
- pytorch
- 우선 순위 큐
- 너비 우선 탐색
- 세그먼트 트리
- 플로이드 와샬
- NEXT
- lazy propagation
- 미래는_현재와_과거로
- 가끔은_말로
- 알고리즘
- 크루스칼
- BFS
- tensorflow
- 조합론
- 회고록
- DP
- 백트래킹
- object detection
- 2023
- Overfitting
- 자바스크립트
- back propagation
- 분할 정복
- 다익스트라
- 문자열
- dfs
- c++
Archives
- Today
- Total
Doby's Lab
백준 4779번: 칸토어 집합 (C++) 본문
https://www.acmicpc.net/problem/4779
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;
}
728x90
'PS > BOJ' 카테고리의 다른 글
백준 16563번: 어려운 소인수분해 (C++) (0) | 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 |