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 |