여행을 개발하다

2차원 배열의 응용 - 달팽이 배열 만들기 본문

BackEnd/C++

2차원 배열의 응용 - 달팽이 배열 만들기

yhtragramming 2019. 5. 11. 10:54

안녕하세요!!

 

오늘 포스팅할 내용은 2차원 배열의 3번째 응용 예제, '달팽이 배열 만들기'입니다.

달팽이 배열은 정보처리기사 알고리즘 파트 등에서 빈번하게 출제되는 유형입니다.

 

그럼 배열은 어떻게 구성되어 있는지 살펴보고, C++ 알고리즘으로 구현해보도록 하겠습니다.


1. 달팽이 배열

말 그대로 달팽이 집 모양처럼 생긴 배열을 의미합니다.

여기서 숫자의 배열 형태를 보시면, 안쪽으로 휘말려 들어가는 모양을 하고 있습니다.

 

그런데 블록을 잡고 자세히 보시면, 5, 4, 4, 3, 3, 2, 2, 1, 1... 의 방식으로 반복되며 채워지는 걸 확인하실 수 있습니다.

 

그렇다면 이러한 규칙성에 기반해서 코드를 짜보도록 하겠습니다.

 

2. C++로 달팽이 배열 만들기

2-1. 정적 할당으로 만들기

항상 그래왔던 것처럼 5 * 5 배열과 필요한 변수들을 선언하겠습니다.

 

i는 행 인덱스, j는 열 인덱스, k 는 각 배열에 채워줄 숫자, sw는 방향이 바뀔 시 사용될 스위치 변수, p는 몇 번을 반복해야 하는지를 알려주는 '반복 인덱스'입니다.

 

그럼 조건이 참일 때까지 반복하기 위해, while문을 사용하겠습니다.

 

k는 1부터 사용해야 하기 때문에, 초기화된 0에서 1을 더한 1로 만들어줍니다.

첫 행을 채워나가는 코드이므로 i는 0행으로 고정시키고, 열 인덱스인 j만 1씩 증가시켜줍니다.

그리고 1~5까지 첫 행을 채워주어야 하므로 반복은 p번 하겠습니다.

 

첫 행 채우기가 끝나면 열 인덱스를 고정시키고, 행 인덱스만 1씩 증가하며 채워줘야 합니다.

단, 반복은 한 번을 줄인 p-1만큼만 해줘야겠죠?

 

그러나 전체 반복문은 while의 구문 안에 있으므로, 반드시 탈출 조건을 지정해줘야 합니다.

그 시점은 반복 인덱스인 p가 0과 작거나 같아지는 순간입니다.

 

이제는 행 인덱스만 변경하며 숫자를 채워주도록 하겠습니다.

 

여기까지의 작업이 완료되면, 다음 그림처럼 숫자가 채워진 상태가 됩니다.

 

이제 다음 숫자를 채우려면 열 인덱스인 j를 1씩 감소시켜야 합니다.

그래서 스위치 변수를 -1로 바꾸어주도록 하겠습니다.

 

이러한 과정이 p가 0 이하일 때까지 반복된다면, while 구문의 반복은 끝이나게 됩니다.

이제 달팽이 배열을 출력해보도록 하겠습니다.

 

제대로 잘 나오네요!!

 

2-2. 동적 할당으로 만들기

이제는 동적 할당으로 바꾸어 보겠습니다.

거의 모든 루프가 같으므로, 이전 포스팅과 반복되는 설명을 생략하도록 하겠습니다.

 

달팽이 배열 역시 홀수로만 입력 받겠습니다.

 

이제 실행!

정상적으로 잘 작동합니다!^^

 

 


지금까지 C++로 달팽이 배열을 구현해보았습니다.

 

다음 포스팅에서 뵙겠습니다 : )

Comments