1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
흔히 생각하는 달팽이의 역순 진행이다.
제일 큰 숫자부터 돌면서 방향 벡터를 이용해 숫자를 채웠다.
표를 벗어나거나 이미 숫자가 들어간 자리라면 방향을 바꾼다.
그리고 출력은 꼭 StringBuilder로 해야 하는 것 같다. System.out.print로 모든 것을 출력하니까 시간 초과가 나왔다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int target = Integer.parseInt(br.readLine());
int findX = 0, findY = 0;
int[][] map = new int[N][N];
int[] dx = {1, 0, -1, 0};
int[] dy = {0, 1, 0, -1};
int d= 0;
int x = 0;
int y = 0;
map[0][0] = N*N;
for(int i=N*N-1;i>0;) {
x += dx[d];
y += dy[d];
if((x<0||x>=N)||(y<0||y>=N)|| map[x][y]!=0) {
x-=dx[d];
y-=dy[d];
d++;
if(d==4) d=0;
}
else {
if(i==target) {
findX = x;
findY = y;
}
map[x][y] = i--;
}
}
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
sb.append(map[i][j]+" ");
}
if(i!=N-1) {
sb.append("\n");
}
}
System.out.println(sb);
System.out.println((findX+1)+" "+(findY+1));
}
}
'ALGORITHM' 카테고리의 다른 글
백준 1051 숫자 정사각형 (Java) (0) | 2023.04.10 |
---|---|
백준 10282 해킹 (Java) (0) | 2023.04.09 |
백준 9012 괄호 (Java) (0) | 2023.04.07 |
백준 9205 맥주 마시면서 걸어가기 (Java) (0) | 2023.04.06 |
백준 1402 아무래도이문제는A번난이도인것같다 (Java) (0) | 2023.04.05 |