처음부터 차근차근

달팽이 배열 알고리즘 본문

알고리즘

달팽이 배열 알고리즘

_soyoung 2022. 3. 2. 13:57
반응형

달팽이 배열은 아래의 이미지 처럼 달팽이 집 처럼 생긴 배열을 말한다.

아래와 같이 값을 저장해주는 알고리즘을 구현해봤다.

 

달팽이 배열 문제

 

문제 분석

1. 2차원 배열 선언 = A(5, 5) = A(R, C) = A(행, 열)


2. V=0, count=5, C=0, R=1, PlusMinus=1  V : 배열에 넣을 값, count : 반복문, 조건문에 사용될 변수, C : 열, R : 행, PlusMinus : 증, 감 결정하는 변수


3. 1 ~ 25까지 V = V + 1(1씩 증가)
     나중에 A(R, C) 배열에다 V 값 저장
4. 진행 방향(달팽이 모양) = 1행(가로) -> 2행(세로) -> 3행 -> 4행 -> 5행(가로) -> 4행(세로) -> 3행 -> 2행(가로) -> 3행(세로) -> 4행(가로) -> 3행(가로) 

 

5. For문
(1) 1회 : for i = 1 to 5(count = 5) -> 5회 반복
배열에 들어갈 값에 +1 -> V + 1
열 변수에 +1 -> C + 1
A[1][1]=1, A[1][2]=2, A[1][3]=3, A[1][4]=4, A[1][5]=5 -> 행(R)은 1 고정, 열(C) 변화 1~5
For문 반복 횟수 감소 -> count--, count = 4가 됨


(2) 2회 : for i = 1 to 4(count = 4) -> 4회 반복
배열에 들어갈 값에 +1 -> V + 1
행 변수에 +1 -> R + 1
A[2][5]=6, A[3][5]=7, A[4][5]=8, A[5][5]=9 -> 행(R)은 변화 2~5, 열(C) 5 고정
증, 감 결정하는 변수 감소 -> PlusMinus * -1 = -1

 

(3) 3회 : for i = 1 to 4(count = 4) -> 4회 반복
배열에 들어갈 값에 +1 -> V + 1
열 변수에 +1 -> C - 1
A[5][4]=10, A[5][3]=11, A[5][2]=12, A[5][1]=13 -> 행(R)은 5 고정, 열(C) 변화 4~1
For문 반복 횟수 감소 -> count--, count = 3이 됨

 

(4) 4회 : for i = 1 to 3(count = 3) -> 3회 반복
배열에 들어갈 값에 +1 -> V + 1

행 변수에 +1 -> R - 1

A[4][1]=14, A[3][1]=15, A[2][1]=16 -> (R)은 변화 4~2, (C) 1 고정

, 감 결정하는 변수 감소 -> PlusMinus * -1 = 1

 

(5) 5: for i = 1 to 3(count = 3) -> 3회 반복

배열에 들어갈 값에 +1 -> V + 1

열 변수에 +1 -> C + 1

A[2][2]=17, A[2][3]=18, A[2][4]=19 -> (R)2 고정, (C) 변화 2~4

For문 반복 횟수 감소 -> count--, count = 2이 됨

 

(6) 6 : for i = 1 to 2(count = 2) -> 2회 반복

배열에 들어갈 값에 +1 -> V + 1

행 변수에 +1 -> R + 1

A[3][4]=20, A[4][4]=21 -> (R)은 변화 3~4, (C) 4 고정

, 감 결정하는 변수 감소 -> PlusMinus * -1 = -1

 

(7) 7: for i = 1 to 2(count = 2) -> 2회 반복

배열에 들어갈 값에 +1 -> V + 1

열 변수에 +1 -> C - 1

A[4][3]=22, A[4][2]=23 -> (R)4 고정, (C) 변화 3~2

For문 반복 횟수 감소 -> count--, count = 1이 됨

 

(8) 8: for i = 1 to 1(count = 1) -> 1회 반복

배열에 들어갈 값에 +1 -> V + 1

행 변수에 +1 -> R - 1

A[3][2]=24

, 감 결정하는 변수 감소 -> PlusMinus * -1 = 1

 

(9) 9: for i = 1 to 1(count = 1) -> 1회 반복

배열에 들어갈 값에 +1 -> V + 1

열 변수에 +1 -> C + 1

A[3][3]=25

For문 반복 횟수 감소 -> count--, count = 0이 됨

 

 

절차(순서도)

 

 

로직(알고리즘) 검증

변수 : V = 0, count = 5, C = 0, R = 1, PlusMinus = 1
cycle For i=1 to count
count = 5
V++ C+=PlusMinus A[R][C]=V count-- count>0 For i=1 to count
count = 4
V++

R+=PlusMinus A[R][C]=V

PlusMinus*=-1
1 i=1 V=1 C=1 A[1][1]=1 5-1=4
count=4
True i=1 V=6 R=2 A[2][5]=6 1*(-1)=(-1)
PlusMinus=-1
i=2 V=2 C=2 A[1][2]=2 i=2 V=7 R=3 A[3][5]=7
i=3 V=3 C=3 A[1][3]=3 i=3 V=8 R=4 A[4][5]=8
i=4 V=4 C=4 A[1][4]=4 i=4 V=9 R=5 A[5][5]=9
i=5 V=5 C=5 A[1][5]=5          
  For i=1 to count
count = 4
V++ C+=PlusMinus A[R][C]=V count-- count>0 For i=1 to count
count = 3
V++

R+=PlusMinus A[R][C]=V PlusMinus*=-1
2 i=1 V=10 C=4 A[5][4]=10 4-1=3
count=3
True

i=1 V=14 R=4 A[4][1]=14 (-1)*(-1)=1
PlusMinus=1

i=2 V=11 C=3 A[5][3]=11 i=2 V=15 R=3 A[3][1]=15
i=3 V=12 C=2 A[5][2]=12 i=3 V=16 R=2 A[2][1]=16
i=4 V=13 C=1 A[5][1]=13        

 

 

C로 구현

 

 

 

 

 

출처 : 자료구조(21-1학기) 박승기교수 강의 내용 변형 및 요약

반응형

'알고리즘' 카테고리의 다른 글

평균 넘는 사람 비율 구하기  (0) 2022.09.24
최댓값, 최솟값 구하기  (0) 2022.09.22
투포인터 알고리즘  (0) 2022.09.15
DSDV 알고리즘과 Link State 알고리즘  (0) 2022.04.01
스케줄링 알고리즘  (0) 2021.10.04
Comments