250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- priority_queue
- string
- deque
- scanner
- dfs
- BFS
- NIO
- html
- math
- Java
- union_find
- GC로그수집
- alter
- CSS
- 스프링부트
- JPA
- 큐
- 힙덤프
- 리소스모니터링
- date
- 스택
- spring boot
- javascript
- Calendar
- sql
- Union-find
- set
- List
- Properties
- map
Archives
- Today
- Total
매일 조금씩
[C++] 백준 2447번: 별찍기 - 10 본문
728x90
반응형
별찍기를 1번부터 9번까지 마스터한 후 드디어 익숙하지 않은 출력형태에 마주하게 되었다.
예제를 통해 규칙을 유추하고 코딩을 한다.
입력은 항상 3의 제곱꼴이라는 조건이 있다.
출력형태를 보면 n을 입력하였을 때 첫번째 줄 부터 n번째 줄까지 출력하는 형태이며
지금부터 규칙을 살펴보도록 한다.
출력형태는 대칭구조를 이루므로 행, 열이 동일 조건을 갖는다고 하는것이 수월할 것으로 판단된다.
행을 i, 열을 j 라고 했을 때 i와 j는 0~n-1의 숫자를 갖는다.
그중 빈칸이 출력되는 칸은 두가지 조건 중 하나 이상 해당 된다. [조건] 1) i와 j가 모두 3으로 나누었을 때 나머지가 1이다. 2) i와 j가 모두 가장 가까운 3의 제곱꼴로 나누었을 때의 몫이 1이다. ex) i = 9, j = 13 일때 9로 나눈 몫이 둘다 1임.
여기서 [조건] 2)는 몫이 1인 경우인데 몫인 1을 i, j라 하고 [조건 ]1)을 하면 만족하므로 하나의 조건문으로 사용가능! |
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include <iostream>
using namespace std;
class star {
private:
int n;
public:
star(int n) :n(n) {} //입력받은 n을 멤버변수 n에 넣겠다.
void callDraw() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
draw(i, j);
}
cout << endl;
}
}
void draw(int di, int dj) {
while (di != 0) {
if (di % 3 == 1 && dj % 3 == 1) {
cout << " ";
return;
}
di /= 3; // 3의 배수로 나누었을 때 몫이 1이면
dj /= 3; // 몫인 1을 3으로 나눈 나머지도 1이기 때문에 while문 안에서 판별 가능.
// 이는 여러개의 if문 사용을 줄임.
// di,dj를 3으로 나눈 나머지의 값이 1이 아닐때
// di,dj를 3으로 나누었을 때의 몫으로 값을 바꿔주는 과정이 꼭 필요.
// ex) 3의 제곱승일 경우 몫이 1이 될때까지 계속 돌게됨
}
cout << "*";
}
};
int main() {
int n;
cin >> n;
star *s = new star(n); //생성자함수로 만들어지는 객체의 포인터 선언.
s->callDraw();
delete s;
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
예제와 같이 출력되는 것을 확인!
테스트를 좀더 해보자.
81을 입력하면
바르게 출력되는 것을 확인 가능하다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[C++] 백준 10809번: 알파벳 찾기 (0) | 2019.09.12 |
---|---|
[C++] 백준 11383번: 뚊 (0) | 2019.09.10 |
[C++] 백준 2799번: 블라인드 (0) | 2019.09.09 |
[C++] 백준 2839번: 설탕배달 (0) | 2019.09.06 |
[C++] 백준 10822번 : 더하기 (0) | 2019.09.04 |