여행을 개발하다
2차원 배열의 응용 - 달팽이 배열 만들기 본문
안녕하세요!!
오늘 포스팅할 내용은 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++로 달팽이 배열을 구현해보았습니다.
다음 포스팅에서 뵙겠습니다 : )
'BackEnd > C++' 카테고리의 다른 글
정렬 알고리즘1. 버블 정렬(Bubble Sort) (0) | 2019.05.11 |
---|---|
2차원 배열의 응용 - 마방진 만들기 (0) | 2019.05.10 |
2차원 배열의 응용 - 'ㄹ'자 배열 만들기 (0) | 2019.05.10 |
Array(배열) - 2차원 배열의 동적할당 (0) | 2019.05.10 |
Array(배열) - 2차원 배열의 정적할당 (0) | 2019.05.10 |