import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int i, j;
for (i = 1; i <= 2 * n - 1; i++) { // 첫 번째 줄, 두 번째 줄 ...
if (i == 1 || i == (n + (n - 1))) { // 첫 번째 줄과 마지막 줄, 즉 천장과 바닥
for (j = 1; j <= n; j++) {
bw.write("*");
}
for (j = 1; j <= (n - 1) + (n - 2); j++) { // 테두리 바깥 공백
bw.write(" ");
}
for (j = 1; j <= n; j++) {
bw.write("*");
}
}
else { // 그 외, 기둥을 만드는 부분
if (i < n) {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= (n - 1) + (n - 2) - 2 * (i - 1); j++) { // 테두리 바깥 공백
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
if (i > n) {
for (j = 1; j <= n - (i % n) - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= 2 * (i % n) - 1; j++) { // 테두리 바깥 공백
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
else {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
}
bw.write("\n");
}
bw.flush();
}
}
...
X 모양은 참 잘 보이는데
옆에 이상한 것도 참 잘 보이네요?
저기에 별이 왜 또 찍혔을까요..
그래서 이만큼 고쳐서 다시 시도해 보았습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int i, j;
for (i = 1; i <= 2 * n - 1; i++) { // 첫 번째 줄, 두 번째 줄 ...
if (i == 1 || i == (n + (n - 1))) { // 첫 번째 줄과 마지막 줄, 즉 천장과 바닥
for (j = 1; j <= n; j++) {
bw.write("*");
}
for (j = 1; j <= (n - 1) + (n - 2); j++) { // 테두리 바깥 공백
// 이런건 식 정리해서 (2 * n - 3) 이런식으로 써주면 깔끔하겠네요!
bw.write(" ");
}
for (j = 1; j <= n; j++) {
bw.write("*");
}
}
else { // 그 외, 기둥을 만드는 부분
if (i < n) {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= (n - 1) + (n - 2) - 2 * (i - 1); j++) { // 테두리 바깥 공백
// 조건식 정리하면 -> 2 * (n - i) - 1
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
if (i > n) {
for (j = 1; j <= n - (i % n) - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= 2 * (i % n) - 1; j++) { // 테두리 바깥 공백
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
else if (i == n) {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
}
bw.write("\n");
}
bw.flush();
}
}
성공하였습니다!
if else
문에서 else
로만 떼우려고 했더니..
다른 부분에서도 해당 조건에 걸려 이상한 부분에 까지 별을 찍어버린 모양입니다..
코드가 조금 복잡해 보입니다만..
(외면..)
참!!
이제부터 코드에 짧게 주석
을 추가해서
제가 풀이한 논리의 아이디어를 표현할 수 있도록 해보려고 합니다!
이 글을 찾아오신 분들께 도움이 되셨으면 좋겠습니다..
이상입니다.