[알고리즘] 소용돌이 예쁘게 출력하기
2024. 1. 19. 17:52ㆍ알고리즘 풀이/Java
https://www.acmicpc.net/problem/1022
1022번: 소용돌이 예쁘게 출력하기
첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다.
www.acmicpc.net
나의 풀이
- 좀 복잡하게 했다.
- 코드가 지저분하기 때문에 리팩토링해보고 싶다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int r1 = sc.nextInt();
int c1 = sc.nextInt();
int r2 = sc.nextInt();
int c2 = sc.nextInt();
int maxR = Math.max(r1, r2) + 5000;
int minR = Math.min(r1, r2) + 5000;
int maxC = Math.max(c1, c2) + 5000;
int minC = Math.min(c1, c2) + 5000;
int[][] graph = new int[Math.abs(r2-r1)+1][Math.abs(c2-c1)+1];
int[] dx = {1, 0, -1, 0};
int[] dy = {0, -1, 0, 1};
int count = 1;
int goLength = 0;
int curX = 5000;
int curY = 5000;
if (curX >= minC && curX <= maxC && curY >= minR && curY <= maxR) {
graph[curY-minR][curX-minC] = 1;
}
for(int i = 0; i < 5000 ; i++) {
for(int j = 0; j < 4; j++) {
if (j == 0 || j == 2) {
goLength += 1;
}
for (int k = 0; k < goLength; k++) {
count++;
int nx = curX + dx[j];
int ny = curY + dy[j];
if (nx >= minC && nx <= maxC && ny >= minR && ny <= maxR) {
graph[ny-minR][nx-minC] = count;
}
curX = nx;
curY = ny;
}
}
}
for (int k = 0; k < goLength; k++) {
count++;
int nx = curX + dx[0];
int ny = curY + dy[0];
if (nx >= minC && nx <= maxC && ny >= minR && ny <= maxR) {
graph[ny-minR][nx-minC] = count;
}
curX = nx;
curY = ny;
}
int maxLen = findMaxLen(graph);
print(graph, maxLen);
}
private static int findMaxLen(int[][] graph) {
int maxLen = 0;
for (int i = 0; i < graph.length; i++) {
for (int j = 0; j < graph[0].length; j++) {
maxLen = Math.max(maxLen, Integer.toString(graph[i][j]).length());
}
}
return maxLen;
}
private static void print(int[][] graph, int maxLen) {
for (int i = 0; i < graph.length; i++) {
for (int j = 0; j < graph[0].length; j++) {
for (int k = 0; k < maxLen - Integer.toString(graph[i][j]).length(); k++){
System.out.print(" ");
}
System.out.print(graph[i][j] + " ");
}
System.out.println();
}
}
}
'알고리즘 풀이 > Java' 카테고리의 다른 글
[알고리즘][X] 배열 복원하기 (1) | 2024.01.23 |
---|---|
[알고리즘][X] 이모티콘 (0) | 2024.01.21 |
[알고리즘] 창용 마을 무리의 개수 (1) | 2024.01.07 |
[알고리즘] 숫자 배열 회전 (0) | 2024.01.01 |
[알고리즘] 스도쿠 검증 (0) | 2024.01.01 |