코딩

달팽이 배열

찬이2 2022. 10. 27. 00:35

참고자료

https://tragramming.tistory.com/25

 

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

안녕하세요!! 오늘 포스팅할 내용은 2차원 배열의 3번째 응용 예제, '달팽이 배열 만들기'입니다. 달팽이 배열은 정보처리기사 알고리즘 파트 등에서 빈번하게 출제되는 유형입니다. 그럼 배열은

tragramming.tistory.com

5 4 4 3 3 2 2 1의 순으로 흘러는 것을 알아내긴 했는데, 그 순서를 반복문으로 구현하는 것에 많은 시행착오가 있었다.

결국 구글링을 통해 반복문 구현방법을 찾아냈다.

코드를 외우기보단 이해해야 하는 것이 정말 중요한 부분인 것 같다.

 

#include <iostream>
#include<string>
using namespace std;

int main() {
    int snailarray[5][5]; //배열크기 지정
	int x = -1; //행값 변수
	int y = 0;  //열값 변수
	int k = 1; //배열에 저장할 변수
	int swit = 1; //저장할 방향전환 변수
	int length = 5; //반복 횟수정할 변수

	while (true)
	{
		//5 4 4 3 3 2 2 1 순으로 반복횟수가 줄어들어야 함

		//x값 변환
		for (int i = 0; i < length; i++)
		{	
			x += swit; //x = -1로 시작한 이유 : 먼저 계산되야 저장될 값이 곂치지 않고 반복됨
			snailarray[x][y] = k++;
		}
		length--; //반복 횟수 감소

		//종료조건이 여기있는 이유 : 마지막 반복횟수 1이 한번 돌고 종료되야 함
		if (length == 0)
		{
			break;
		}

		//y값 변환
		for (int j = 0; j < length; j++)
		{
			y += swit;
			snailarray[x][y] = k++;			
		}
		swit *= -1; //감소 또는 증가됨이 결정됨
	}

	for (int y = 0; y < 5; y++)
	{
		for (int x = 0; x < 5; x++)
		{
			cout << snailarray[x][y] << "\t";
		}
		cout << endl << endl;
	}	
	
	int input;
	cin >> input;
}