-
JUNGOL 실력키우기 도형만들기2 - 달팽이삼각형 | 달팽이사각형보관함 2020. 1. 24. 10:41
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 도형만들기2의 달팽이 시리즈를 풀어보겠습니다.
1337 : 달팽이삼각형
이 문제는 기본적으로 우 하단으로 이동하는 것, 왼쪽으로 이동하는 것, 상단으로 이동하는 것을 분리하여 처리해야 합니다. 그리고 종료 조건은 이 세 이동을 모두 할 수 없는 경우가 됩니다.
저는 기본적으로 다음에 이동해야 할 위치에 값이 있거나 최대로 이동한 경우(n에 도달 또는 배열의 경계에 도달) 값을 증가시키지 않고 저장하고 반복문을 빠져나오도록 처리했습니다.
#include <iostream> using namespace std; int arr[101][101]; int main(void) { int n; cin >> n; for (int i = 0; i <= n; ++i) { for (int j = 0; j <= n; ++j) { arr[i][j] = -1; } } for(int i=0, j=0, num=0; ;) { bool isContinue{ false }; while (true) { if (i + 1 == 100 || i + 1 == n || arr[i + 1][j + 1] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i++][j++] = num++; if (num > 9) num = 0; } while (true) { if (j == 0 || arr[i][j - 1] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i][j--] = num++; if (num > 9) num = 0; } while (true) { if (i == 0 || arr[i - 1][j] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i--][j] = num++; if (num > 9) num = 0; } if (!isContinue) break; } for (int i = 0; i < n; ++i) { for (int j = 0; j <= i; ++j) { cout << arr[i][j] << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=609&sca=2020
1707 : 달팽이사각형
이 문제는 달팽이 삼각형에서 방향이 한 개 추가된 것외에는 동일하게 풀 수 있는 문제입니다.
#include <iostream> using namespace std; int arr[101][101]; int main(void) { int n; cin >> n; for (int i = 0; i <= n; ++i) { for (int j = 0; j <= n; ++j) { arr[i][j] = -1; } } for(int i=0, j=0, num=1; ;) { bool isContinue{ false }; while (true) { if (j + 1 == 100 || j + 1 == n || arr[i][j + 1] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i][j++] = num++; } while (true) { if (i + 1 == 100 || i + 1 == n || arr[i + 1][j] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i++][j] = num++; } while (true) { if (j == 0 || arr[i][j - 1] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i][j--] = num++; } while (true) { if (i == 0 || arr[i - 1][j] != -1) { arr[i][j] = num; break; } isContinue |= true; arr[i--][j] = num++; } if (!isContinue) break; } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << arr[i][j] << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=980&sca=2020