Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 10993] 별 찍기 - 18 본문
반응형
입력된 수가 홀수 일때 정삼각형,
짝수 일때 역삼각형을 그리는 규칙을 가졌다.
삼각형은 외곽선만 존재하고 n 입력시 n-1, n-2, ... , (n>0일때까지) 를 재귀하며 내부에 삼각형을 그려야 한다.
문제 예제 출력 부분을 드래그 해보면 알 수 있을텐데 * 우측의 빈공간에는 공백이 없다.
k*k 형식으로 우측을 공백으로 채우면 출력형식 오류를 반환하니 우측의 공백은 없애주어야 한다.
코드 클린 작업을 하지 않아서 지저분하지만 삼각형을 그리는 부분은 대충 확인 가능할 것이다.
public class Main {
static char a[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int width = 1;
int height = 1;
int four = 4;
int two = 2;
for(int i=0; i<n-1; i++) {
width += four;
four *=2;
}
for(int i=0; i<n-1; i++) {
height += two;
two *= 2;
}
a = new char[height][width];
for(int i=0; i<height; i++)
for(int j=0; j<width; j++)
a[i][j] = ' ';
drawStar(0, 0, height, width, n);
StringBuilder sb = new StringBuilder();
if(n % 2 == 0) {
int k = 0;
for(int i=0; i<height; i++) {
for(int j=0; j<width-k; j++)
sb.append(a[i][j]);
sb.append("\n");
k++;
}
} else {
int k = 1;
for(int i=0; i<height; i++) {
for(int j=0; j<width/2+k; j++)
sb.append(a[i][j]);
sb.append("\n");
k++;
}
}
System.out.println(sb.toString());
}
public static void drawStar(int s, int e, int hlen, int wlen, int seq) {
if(seq <= 0) return;
int mid = (s + s + wlen)/2;
int left = s;
int right = s + wlen;
//삼각형
if(seq % 2 == 1) {
int innerLeft = mid;
int innerRight = mid;
for(int i=e; i<e + hlen; i++) {
for(int j=innerLeft; j<=innerRight; j++) {
if(i == e || i == e + hlen-1 || j == innerLeft || j == innerRight)
a[i][j] = '*';
else
a[i][j] = ' ';
}
innerLeft--;
innerRight++;
}
}
//역삼각형
else {
int innerLeft = left;
int innerRight = right;
for(int i=e; i<e + hlen; i++) {
for(int j=innerLeft; j<innerRight; j++) {
if(i == e || i == e + hlen-1 || j == innerLeft || j == innerRight-1)
a[i][j] = '*';
else
a[i][j] = ' ';
}
innerLeft++;
innerRight--;
}
}
int moveRight = s + (int)Math.pow(2, seq-1);
if(seq % 2 == 1) drawStar(moveRight, e + hlen/2, hlen/2, wlen - (int)Math.pow(2, seq), seq-1);
else drawStar(moveRight, e+1, hlen/2, wlen - (int)Math.pow(2, seq), seq-1);
}
}
배열초기화를 안해주어서 영문도 모른체 틀렸습니다만 받고 있었는데
질문게시판에 올리니 초고수분이 3분만에 도와주었다...
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 문제집] N과 M 시리즈 (0) | 2019.06.19 |
---|---|
[백준 10997] 별 찍기 - 22 (0) | 2019.06.19 |
[백준 10757] 큰 수 A+B (0) | 2019.06.18 |
[백준 1965] 상자넣기 (0) | 2019.06.18 |
[백준 1309] 동물원 (0) | 2019.06.18 |
Comments