본문 바로가기

Algorithm

Spiral Algorithm

달팽이 알고리즘이라고 부르는 이 나열형 배열 알고리즘은 푸는 방법은 다양합니다.

탐색으로 풀 수도 있고 반복문을 넣어서 푸는 방법이 있습니다.

저는 반복문을 통해서 답을 구해보겠습니다.

반복문을 써서 푸는 이유는 알고리즘을 구현할 때 for문에 i를 배열의 인덱스로 가져가는 경향이 많아 

문제 해소가 안되는 경우가 많습니다.


이러한 사고를 바꾸고 싶어서 다음과 같이 구현하였습니다.

반복문은 말그대로 반복하는 횟수입니다.

단순히 그렇게만 이해하면 될 것 같습니다.





import java.util.Scanner;


public class Spiral {


private static Scanner scanner;

private static int N;

private static int board[][];


public static void main(String[] args) {

scanner = new Scanner(System.in);

N = scanner.nextInt();


board = new int[N][N];


int value = 0;

int dir = 1;

int n = N;

int row_inx = 0;

int col_inx = -1;

while (value < N * N) {

// 열부터 채우기

// 열부터 먼저 채울 것

for (int i = 0; i < n; i++) {

value += 1;

col_inx += dir;

board[row_inx][col_inx] = value;

}


n--; // 행 한 칸씩 줄이기 & 열 한칸씩 줄이기


for (int i = 0; i < n; i++) {

value += 1;

row_inx += dir;

board[row_inx][col_inx] = value;

}


dir *= -1; // 열 증가, 행 증가 후 이제 역으로 열 감소, 행 감소

}


printAll();

}


private static void printAll() {

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

System.out.print(board[i][j] + " ");

}

System.out.println("");

}

}

}




배열 인덱스 요소를 별도로 두고 반복문은 단순히 반복하는데에만 치중한 코드입니다.

앞으로 반복문을 이용해서 배열에 값을 넣을때 무의식적으로 i를 배열 인덱스로 넣으려고 생각하지 마세요.

핵심은 반복문은 단순 반복을 한다는 것에만 집중해야 한다는 것이며, 인덱스에 대해서는 조금 더 유연하게 

생각해야 한다는 것입니다.


감사합니다 =)

반응형

'Algorithm' 카테고리의 다른 글

BFS & DFS 구분하자!  (2) 2019.02.25
슬라임문제_삼성DS준비  (0) 2019.02.12
SW_EXPERT 1861 정사각형 방  (0) 2019.01.26
SW_EXPERT_3234_준환이의 양팔저울  (0) 2019.01.19
NN단 알고리즘 문제  (0) 2019.01.09