본문 바로가기

C++ 문제풀이

[C++] 달팽이 배열

728x90

문제 

같은 달팽이 배열 만들기

 

풀이

분명 예전에 공부했을 때 풀었던 문제였는데 몇년이 지나고 난 뒤 푸니 다 까먹었다. 그래도 그 당시에는 오래걸려도 아예 못풀었던거 같은데, 이번에는 안보고 머리로 풀었다는거에 위안을.... 다만 코드가 깔끔하진 않은 것 같다.

 

2차원 배열을 선언 하고,  n * m 크기만큼 1씩 증가하여 배열에 넣어 줄 data 변수, 

현재 몇 칸을 x축으로 이동했는지 필요한 inc_x , 몇 칸을 가야하는지 판단할 limit_x 변수

x 값을 증가 시킬지, 감소시킬지 단위를 정해주는 row 변수 

현재 움직여야 할 것이 x 값인지, y 값인지 정해주는 turn 변수가 있다.

 

if( m == 1 ) turn = true 같은 경우는 열이 1 일 때 값이 제대로 입력이 안되는 경우가 있는데

아마 처음 turn 이 무조건 false로 시작해서 조건을 만족시키지 못하는 경우인 것 같다. 이 때문에 뭔가 굉장히 아쉬웠는데

저 조건하나로 해결이 되긴 했으니 일단 만족하기로 했다.

 

 

#include <iostream>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	while (1)
	{
		int n, m;

		cout << "행 과 열 입력" << endl;
		cin >> n >> m;

		system("cls");

		int arr[500][500];

		// 데이터값
		int data = 1;
		int limit_x = m - 1, limit_y = n - 1;
		int inc_x = 0, inc_y = 0;
		int col = 1, row = 1;
		bool turn = false;

		if (m == 1) turn = true;

		int x = 0, y = 0;
		while (data < n * m + 1)
		{
			arr[y][x] = data;

			if (turn)
			{
				y += col;
				inc_y++;
				if (inc_y >= limit_y)
				{
					inc_y = 0;
					col *= -1;
					turn = false;

				}
			}
			else
			{
				x += row;
				inc_x++;
				if (inc_x >= limit_x)
				{
					inc_x = 0;
					turn = true;

					if (data >= 2 * m)
					{
						limit_x--;
						limit_y--;
					}
					row *= -1;
				}
			}
			data++;
		}
		cout << "행 : " << n << "	열 : " << m << "\n";
		for (int i = 0; i < n; ++i)
		{
			for (int j = 0; j < m; ++j)
			{
				cout << arr[i][j] << "	";
			}
			cout << "\n";
		}

	}

}

 

 

실행결과

728x90

'C++ 문제풀이' 카테고리의 다른 글

[C++] 멀티 쓰레드  (0) 2022.08.23
[Direct X 11] 캐릭터 이동 회전 선형 보간  (0) 2022.08.22
[c++] 진짜 사람찾기 문제  (0) 2022.08.10
DirectX 11 구 그리기  (0) 2022.06.29
C++ 포물선 운동 코딩  (0) 2022.06.21