728x90
반응형
import java.io.*;
public class 달팽이_1913 {
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
// 입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int target = Integer.parseInt(br.readLine());
// 2차원 배열 생성
int board[][] = new int[N][N];
int resultX = Integer.MIN_VALUE;
int resultY = Integer.MIN_VALUE;
// 시작 좌표
int x = N / 2;
int y = N / 2;
// 첫 숫자는 먼저 입력해 둔다
board[x][y] = 1;
int num = 2;
for(int i = 1; i < N; i++) {
// i가 홀수일 때, x는 줄어들고 y는 늘어난다
if(i % 2 == 1) {
for(int j = 1; j < i+1; j++) {
x -= 1;
board[x][y] = num;
num += 1;
}
for(int j = 1; j < i+1; j++) {
y += 1;
board[x][y] = num;
num += 1;
}
}
// i가 짝수일 때, x는 늘어나고 y는 줄어든다
else {
for(int j = 1; j < i+1; j++) {
x += 1;
board[x][y] = num;
num += 1;
}
for(int j = 1; j < i+1; j++) {
y -= 1;
board[x][y] = num;
num += 1;
}
}
// 마지막 반복엔 x를 한번 더 빼준다
if(i == N - 1) {
for(int j = 1; j < i+1; j++) {
x -= 1;
board[x][y] = num;
num += 1;
}
}
}
// 출력
for(int i = 0; i < N; i ++) {
for(int j = 0; j < N; j ++) {
sb.append(board[i][j]).append(" ");
if(board[i][j] == target) {
resultX = i + 1;
resultY = j + 1;
}
}
sb.append("\n");
}
System.out.print(sb.toString());
System.out.printf("%d %d", resultX, resultY);
}
}
숫자가 입력되는 위치에 규칙이 있다.
x좌표가 줄어들 땐 y좌표가 늘어난다.
y좌표가 늘어날 땐 x좌표가 줄어든다. 서로 번갈아가면서 늘어나거나 줄어든다.
for문은 i값을 1 ~ N - 1 로 설정한다.
i값 만큼 x좌표와 y좌표가 변한다.
또한 i가 홀수일 땐 x좌표가 줄어들고 y 좌표가 늘어나고, 짝수면 반대다.
N이 3일 경우,
i가 1 일 때, x는 한 번 줄어들고 y는 한 번 늘어난다.
i가 2 일 때, x는 두 번 늘어나고 y는 두 번 줄어든다.
i가 N - 1(2)에 도달하면, 추가로 마지막에 i번 만큼 x를 줄여준다.
N이 5일 경우,
i가 1 일 때, x는 한 번 줄어들고 y는 한 번 늘어난다.
i가 2 일 때, x는 두 번 늘어나고 y는 두 번 줄어든다.
i가 3 일 때, x는 세 번 줄어들고 y는 세 번 늘어난다.
i가 4 일 때, x는 네 번 늘어나고 y는 네 번 줄어든다.
i가 N - 1(4)에 도달하면, 마지막에 i번 만큼 x를 줄여준다.
x 또는 y를 한번 늘리거나 줄일 때마다(좌표가 변할 때마다) 1추가된 값을 배열의 해당 위치에 저장하면 된다.
그냥 print문으로 출력하니 메모리 초과가 떴다. 출력량이 매우 많아서 그런 듯 한데, StringBuilder를 이용하니 무난하게 통과되었다.
728x90
반응형
'Algorithm > Implementation' 카테고리의 다른 글
[Baekjoon 2108 / Python / 실버3] 통계학 (2) | 2024.09.25 |
---|---|
[Baekjoon 2503 / Python / 실버3] 숫자 야구 (4) | 2024.06.10 |
[Baekjoon 13717 / Java / 실버5] 포켓몬 GO (0) | 2024.05.14 |
[Baekjoon 10655 / Java / 실버3] 마라톤 1 (0) | 2024.04.27 |
[Baekjoon 3190 / python / 골드4] 뱀 (0) | 2024.03.27 |