https://www.acmicpc.net/problem/10994
(1) for문 이용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int I=Integer.parseInt(br.readLine());
int n=4*I-3; // 격자 크기
char[][] array=new char[n][n];
int idx=0;
for(int k=1; k<=I; k++) { // n번 사각형 그리기
for(int i=idx; i<n-idx; i++) {
array[idx][i]='*'; // 사각형 맨 윗줄 그리기
array[n-idx-1][i]='*'; // 맨 아랫줄 그리기
array[i][idx]='*'; // 사각형 맨 왼쪽줄 그리기
array[i][n-idx-1]='*'; // 사각형 맨 오른쪽줄 그리기
}
idx+=2; // 점점 작은 정사각형을 안쪽에 그려가기 위한 값 변경
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if (array[i][j]!='*') {
bw.write(' ');
}else {
bw.write('*');
}
}
bw.write("\n");
}
bw.close();
}
}
사각형 그리는 순서
가장 가장자리에 위치한 박스 (1) -> (2) -> (3)
(2) bfs로 푼 코드
-> 시간 훨씬 오래 걸림
package day_0920;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
class Point{
int x,y,cnt;
public Point(int x, int y,int cnt) {
super();
this.x = x;
this.y = y;
this.cnt=cnt;
}
}
public class n10994 {
static int n;
static char[][] map;
static boolean[][] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n=Integer.parseInt(br.readLine());
n-=1;
if(n==0) {
System.out.print("*");
}else {
int N=n*4+1;
map=new char[N][N];
visited=new boolean[N][N];
bfs((N)/2,(N)/2, N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
}
private static void bfs(int x, int y, int N) {
int[] dxs= {-1,-1,0,1,1,1,0,-1};
int[] dys= {0,1,1,1,0,-1,-1,-1};
Queue<Point> queue=new ArrayDeque<>();
queue.add(new Point(x,y,1));
visited[x][y]=true;
map[x][y]='*';
while(!queue.isEmpty()) {
Point p= queue.poll();
for (int i = 0; i < 8; i++) {
int nx=p.x+dxs[i];
int ny=p.y+dys[i];
if(canGo(nx,ny,N) && !visited[nx][ny]) {
queue.add(new Point(nx,ny,p.cnt+1));
visited[nx][ny]=true;
if(p.cnt%2!=0) {
map[nx][ny]=' ';
}else {
map[nx][ny]='*';
}
}
}
}
}
private static boolean canGo(int nx, int ny, int N) {
return nx>=0 && nx<N && ny>=0 && ny<N;
}
}
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[2164] 카드2 in Java (0) | 2022.08.04 |
---|---|
[SWEA] 1225번 [S/W 문제해결 기본] 7일차 - 암호생성기 in Java (0) | 2022.08.04 |
[SWEA] 1873. 상호의 배틀필드 in Java (0) | 2022.08.03 |
[17413] 단어뒤집기2 in Java (0) | 2022.08.03 |
[20291] 파일 정리 in Java (0) | 2022.08.03 |