C언어 배열 질문입니다!!ㅠㅡㅠ
조회수 844회
#include <stdio.h>
int main(void)
{
int t,n;
int tarr[10][10];
scanf("%d", &t);
for (int c = 1; c <= t; c++)
{
scanf("%d", &n); //n x n의 달팽이 배열
printf("#%d\n", c); //몇 번째 테스트 인지
int num = 1;
int m = n;
int x = 0, y = 0, p = 1;
while (m > 0)
{
for (int i = 0; i < m; i++)
{
tarr[x][y] = num;
num++;
y = y + p;
if (y >= n || y < 0)
{
y = y - p;
}
}
m--;
for (int i = 0; i < m; i++)
{
x = x + p;
tarr[x][y] = num;
num++;
}
p = -p;
y = y + p;
}
for (int i = 0; i < n; i++) //출력
{
for (int j = 0; j < n; j++)
{
printf("%d ", tarr[i][j]);
}
printf("\n");
}
}
return 0;
}
문제 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE&&& 달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.
[예제]
N이 3일 경우,
N이 4일 경우,
[제약사항]
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
[출력]
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
위 문제에 대해 제가 작성한 코드입니다. 실행해보면
이런 결과가 나옵니다. 3을 입력했을 때는 정상적으로 작동하는데 4를 입력하면 오류가 떠요ㅠㅠ 계속 수정 중인데 어디를 건드려야 할지 모르겠어요ㅠㅠㅠㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
이해하기 쉽게 다른 방식으로 해석해 봅시다.
정방형의 타일맵 위를 움직이는 로봇이 있습니다.
- 한 번에 타일 한 칸씩 움직일 수 있습니다. - 이미 한 번 방문한 타일이나 맵 밖으로는 이동이 불가능합니다. - 이 로봇의 이동 우선순위는 다음과 같습니다. => 우 하 좌 상 - 우선순위에 따라 다음 타일로 이동합니다. - 이동한 위치에는 몇 번째 방문한 타일인지 기록합니다. - 사방이 막혀 있다면 이동을 종료합니다. - 시작 지점은 좌상단입니다.
이동할 위치에 대한 룩업을 시도해 보고 갈 수 없으면 다음 우선순위의 방향으로 같은 로직을 시도합니다.
움직일 수 없을 때 종료 로직과
룩업에 필요한 조건문
우선순위를 고려한 if ~ else ~
움직였을때 값을 쓰는 작업
이것들을 적절히 스까서 작성하면 될 것 같네요.
-
if (y >= n || y < 0) { y = y - p; }
여기서 조건이 잘못되었습니다. 이 조건은
n x n
사각영역 바깥으로 나갔는지만 검사하는데, 방향을 꺽어야 할 조건은 그것만이 아닙니다. 사각영역 안이라도 숫자가 이미 차 있는 경우에도 방향을 꺽어야 합니다.- 숫자가 이미 차 있는 경우에도 방향을 꺽어야 한다는 말이 어떤 뜻인가요?? C언어 시작한지 얼마 안되서 너무 어렵네요ㅠㅠ 알 수 없는 사용자 2019.10.10 17:06
- 4x4 에서 14까지 쓰고서 15를 어디에 쓸까요? nowp 2019.10.10 17:23
댓글 입력