반응형
메모리초과를 해결하는 아이디어를 얻지못해서 한참 해맸던 문제이다.
이때 문제에 힌트에서는 r1~r2 c1~c2 범위가 200을 넘지않는다.
따라서 y,x 를 조작하면서 범위안에 들어왓을 때 배열에 저장해주면된다.
문제를 풀면서 한참해맨게 있는데 절대값이 5000이라는 힌트를보고 10000*10000 의 카운트 개수가 한계라고 생각하고 while(1억일때 브레이크)를 해주어서 틀리게 되었다.
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B1022 {
static int dy[] = { 0, -1, 0, 1 };
static int dx[] = { 1, 0, -1, 0 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int r1, c1, r2, c2;
StringTokenizer st = new StringTokenizer(br.readLine());
r1 = Integer.parseInt(st.nextToken());
c1 = Integer.parseInt(st.nextToken());
r2 = Integer.parseInt(st.nextToken());
c2 = Integer.parseInt(st.nextToken());
// start num;
int cnt = 0;
int value = 1;
int y = 0;
int x = 0;
int d = 0;
int dis = 0;
int distance = 1;
int turn = 0;
int rstand = r1 * (-1);
int cstand = c1 * (-1);
int ans[][] = new int[r2 - r1 + 1][c2 - c1 + 1];
// System.out.println(rstand +" "+cstand);
while (cnt!=(r2-r1+1)*(c2-c1+1)) {
// System.out.println(y+" "+x);
// System.out.println(y+" "+x);
if (y >= r1 && y <= r2 && x >= c1 && x <= c2) {
cnt++;
ans[y + rstand][x + cstand] = value;
}
y = y + dy[d];
x = x + dx[d];
value++;
dis++;
// if(value==30)
// break;
if (dis == distance) {
turn++;
d = (d + 1) % 4;
dis = 0;
if (turn == 2) {
turn = 0;
distance++;
}
}
}
StringBuilder sb = new StringBuilder();
int len = 0;
len = Math.max(len, (ans[r1 + rstand][c1 + cstand] + "").length());
len = Math.max(len, (ans[r1 + rstand][c2 + cstand] + "").length());
len = Math.max(len, (ans[r2 + rstand][c1 + cstand] + "").length());
len = Math.max(len, (ans[r2 + rstand][c2 + cstand] + "").length());
for (int i = 0; i <= r2 - r1; i++) {
for (int j = 0; j <= c2 - c1; j++) {
for (int l = 0; l < len - (ans[i][j] + "").length(); l++)
sb.append(' ');
sb.append(ans[i][j]);
if (j != c2 - c1)
sb.append(' ');
}
sb.append('\n');
}
System.out.println(sb.toString());
}
}
반응형
'ProgramSoliving' 카테고리의 다른 글
백준 : 1443 망가진 시계 (0) | 2020.05.16 |
---|---|
백준 : 1360 되돌리기 (0) | 2020.05.16 |
백준 : 2252 DFS ,BFS (0) | 2020.05.13 |
백준 : 2262 (0) | 2020.05.06 |
백준 : 4354 java (0) | 2020.05.05 |