일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 최소공배수
- C++
- prototype 프로퍼티
- float: right
- 한글이 두 번 입력됨
- 백준
- backtracking
- 프로그래밍
- 한글 입력 시 이벤트 두 번 발생
- 백준 9610번 파이썬 문제 풀이
- 자바스크립트
- 낙관적 업데이트
- 파이썬
- 동적 계획법
- javascript
- 알고리즘
- 유클리드 호제법
- __proto__ 접근자 프로퍼티
- css
- 비동기
- 2522
- dp
- python
- 9610
- 백트래킹
- Tanstack Query
- 시간
- 동기
- 함수 객체의 프로퍼티
- 메타버스
- Today
- Total
염딩코
백준 4779번 c++ 풀이 본문
문제
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다.
전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자.
1. -가 3N개 있는 문자열에서 시작한다.
2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다.
3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속 한다.
예를 들어, N=3인 경우, 길이가 27인 문자열로 시작한다.
---------------------------
여기서 가운데 문자열을 공백으로 바꾼다.
--------- ---------
남은 두 선의 가운데 문자열을 공백으로 바꾼다.
--- --- --- ---
한번 더
- - - - - - - -
모든 선의 길이가 1이면 멈춘다. N이 주어졌을 때, 마지막 과정이 끝난 후 결과를 출력하는 프로그램을 작성하시오.
입력
입력을 여러 줄로 이루어져 있다. 각 줄에 N이 주어진다. 파일의 끝에서 입력을 멈춘다. N은 0보다 크거나 같고, 12보다 작거나 같은 정수이다.
출력
입력으로 주어진 N에 대해서, 해당하는 칸토어 집합의 근사를 출력한다.
예제 입력 1
0
1
3
2
예제 출력 1
-
- -
- - - - - - - -
- - - -
풀이
규칙을 발견하는 것이 중요합니다.
1) N=0일 때
"-"
2) N=1일 때
"- -"
3) N=2일 때
"- - - -"
4) N=3일 때
"- - - - - - - -"
...
전체적인 구조는 `작대기 + 공백 + 작대기` 입니다.
잘 살펴보면 작대기에는 N-1번째 구조가 들어가고 있습니다.
그리고 가운데 공백에도 3^(N-1)개의 공백이 존재합니다.
'알고리즘 PS > C++' 카테고리의 다른 글
백준 24060번 c++ 풀이 (0) | 2023.04.29 |
---|---|
백준 25501번 c++ 풀이 (0) | 2023.04.28 |
백준 27433번 c++ 풀이 (0) | 2023.04.28 |
백준 2581번 c++ 문제 풀이 (1) | 2022.02.24 |
백준 2501번 c++ 문제 풀이 (0) | 2022.02.24 |