일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IT 트렌드
- SSAFY 7기
- 백준위
- 네트워크 관리사 2급
- 카카오
- IT 동향
- 코테
- 코딩테스트 연습
- 싸피셜
- python
- Java
- java 객체지향 프로그래밍
- SSAFY
- 코딩테스트
- 신문 스크랩
- 네트워크 관리사 2급 실기
- 프로그래머스
- 싸피
- 구글
- SSAFYcial
- it 이슈
- KT
- 백준
- 리얼클래스
- 신문스크랩
- it 뉴스
- 우테코
- 네트워크 관리사
- 인앱결제
- html
- Today
- Total
개발자일걸요..?
2447번 별찍기 본문
문제링크 : www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
문제
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
***
* *
***
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
입력
첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
예제 입력 1
27
예제 출력 1
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
********* *********
* ** ** * * ** ** *
********* *********
*** *** *** ***
* * * * * * * *
*** *** *** ***
********* *********
* ** ** * * ** ** *
********* *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
<알고리즘>
k = 1 N =3
0 | 1 | 2 | |
0 | * | * | * |
1 | * | * | |
2 | * | * | * |
비어 있는 곳 (1,1)
x%3 =1 y%3 =1
k = 2 N= 9
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
0 | * | * | * | * | * | * | * | * | * |
1 | * | * | * | * | * | * | |||
2 | * | * | * | * | * | * | * | * | * |
3 | * | * | * | * | * | * | |||
4 | * | * | * | * | |||||
5 | * | * | * | * | * | * | |||
6 | * | * | * | * | * | * | * | * | * |
7 | * | * | * | * | * | * | |||
8 | * | * | * | * | * | * | * | * | * |
비어있는 곳 : (1,1) (1,4) (1,7) (4,1) (4,7) (7,1) (7,4) (7,7)
x%3 = 1 y%3 =1
(3,3) (4,3) (5,3) (3,4) (4,4) (5,4) (3,5) (4,5) (5,5)
(x/3)%3 = 1 (y/3)%3 =1
k = 3 N = 27
비어있는 곳: 1) x = 1,4,7,10,13,16,19,22,25 => x%3=1
y = 1,4,7,10,13,16,19,22,25 => y%3=1
2) x = 3,4,5,12,13,14,21,22,23 => (x/3)%3 = 1 y = 3,4,5 => (y/3)%3 =1
x = 3,4,5,12,13,14,21,22,23 => (x/3)%3 = 1 y = 12,13,14 => (y/3)%3 =1
x = 3,4,5,12,13,14,21,22,23 => (x/3)%3 = 1 y = 21,22,23 => (y/3)%3 =1
3) x = 9,10,11,12,13,14,15,16,17 => ((x/3)/3)%3 = 1
y = 9,10,11,12,13,14,15,16,17 => ((y/3)/3)%3 = 1
이를 코드로 만들면 아래와 같다
#include <iostream>
using namespace std;
void calculate(int x, int y, int size) {
if ((x/(size/3)) % 3 == 1 && (y/(size/3)) % 3 == 1) {
cout<< ' ';
}
else {
if (size / 3 == 1) {
cout<<'*';
}
else {
calculate(x, y, size/3);
}
}
}
void star(int size) {
for (int y = 0; y < size; y++) {
for (int x = 0; x < size; x++) {
calculate(x,y,size);
}
cout << "\n";
}
}
int main() {
int N = 0;
cin >> N;
star(N);
return 0;
}
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
7568번 덩치 (0) | 2021.02.01 |
---|---|
1436번 영화 감독 숌 (0) | 2021.02.01 |
2231번 분해합 (0) | 2021.01.31 |
2798번 블랙잭 (0) | 2021.01.31 |
11729번 하노이 탑 이동순서 (0) | 2021.01.30 |