안녕하세요? QRD입니다.
오늘은 알고리즘 문제를 풀어 볼 겁니다.
인터넷에 많이 떠도는 문제 위주로 발췌해서 스스로 한 번 풀어보고 공유하는 거라 정확한 답이 될 순 없어요.
혹시 제가 구현한 것보다 더 쉽고 괜찮은 알고리즘으로 해결하신다면 공유 좀 부탁드립니다.
문제 나갑니다.
오늘은 알고리즘 문제를 풀어 볼 겁니다.
인터넷에 많이 떠도는 문제 위주로 발췌해서 스스로 한 번 풀어보고 공유하는 거라 정확한 답이 될 순 없어요.
혹시 제가 구현한 것보다 더 쉽고 괜찮은 알고리즘으로 해결하신다면 공유 좀 부탁드립니다.
문제 나갑니다.
1 | 2 | 3 | 4 | 5 |
16 | 17 | 18 | 19 | 6 |
15 | 24 | 25 | 20 | 7 |
14 | 23 | 22 | 21 | 8 |
13 | 12 | 11 | 10 | 9 |
위와 같은 모양으로 숫자를 출력해 보세요.
한 번쯤은 보셨을 일명 달팽이 알고리즘 입니다.
무궁무진한 코딩 방법이 존재하겠지만, 저는 아래와 같이 코딩하였습니다.
package test; import java.util.Scanner; public class test { public static void main(String args[]) { snailAlgorithm(); } public static boolean snailAlgorithm() { Scanner scan = new Scanner(System.in); int length = scan.nextInt(); // 원하는 정사각형 변의 길이 입력하기. int[][] matrix = new int[length][length]; int cnt = 1; // 숫자 int x = -1; // x축 int y = 0; // y축 int step = length; // 거리 int direct = 1; // 방향 while (true) { for (int i = 0; i < step; i++) { // → ← 방향 출력 x = x + direct; matrix[y][x] = cnt; cnt++; } if (step < 1) { // 더 이상 진행할 방향이 없으면 return printMatrix(matrix); return false; } step = step - 1; for (int i = 0; i < step; i++) { // ↑ ↓ 방향 출력 y = y + direct; matrix[y][x] = cnt; cnt++; } direct = direct * -1; // 180도 방향 전환 } } /** * 2차원 배열을 출력해주는 메서드 * @param matrix */ public static void printMatrix(int matrix[][]) { for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix.length; j++) { System.out.print(matrix[i][j] + "\t"); } System.out.println("\n"); } } }
실행 후 맨 처음 원하는 정사각형의 크기를 입력합니다.(ex. 5)
달팽이 알고리즘을 잘 살펴보면,
→ 방향 : 5, ↓ 방향 : 4, ← 방향 : 4, ↑ 방향 : 3, → 방향 : 3, ↓ 방향 : 2, ← 방향 : 2, ↑ 방향 : 1, → 방향 : 1 (표시한 숫자만큼 그려 나가야 함.)
x 와 y 의 크기는 증가,고정 / 고정,증가, / 감소,고정/ 고정,감소
힌트는 여기까지 드리겠습니다. 주석과 위에 간단한 설명을 보시면 해석 가능할 것입니다.
달팽이 알고리즘을 잘 살펴보면,
→ 방향 : 5, ↓ 방향 : 4, ← 방향 : 4, ↑ 방향 : 3, → 방향 : 3, ↓ 방향 : 2, ← 방향 : 2, ↑ 방향 : 1, → 방향 : 1 (표시한 숫자만큼 그려 나가야 함.)
x 와 y 의 크기는 증가,고정 / 고정,증가, / 감소,고정/ 고정,감소
힌트는 여기까지 드리겠습니다. 주석과 위에 간단한 설명을 보시면 해석 가능할 것입니다.
감사합니다. QRD였습니다. 꾸벅(_ _)