Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Laravel
- 20.04
- 옵G
- Raspberry Pi
- TiL
- 맛집
- FMS
- 옵티머스g
- php
- MySQL
- 우분투
- ubuntu
- 옵티머스 g
- Selenium
- Ubuntu 20.04
- 코드이그나이터
- 제주도
- 회고
- C
- 우분투 20.04
- upbit
- 라즈비안
- codeigniter
- 프레임워크
- 셀레니움
- 라라벨
- 라즈베리파이
- 옵지
- 맥
- 업비트
Archives
- Today
- Total
평범한 이야기들
[C]C언어 달팽이- 본문
728x90
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9 달팽이;
C언어를 배운지 벌써 3년이 지난 시점에 갑자기 달팽이 프로그램이 생각이 났다.
언어를 배울 당시 이 문제를 접하고서는 해결하지 못한체 기억속에서 사라졌다.
그래서 그런지 한 번 해볼까 란 생각 으로 프로그램에 대해서 생각해봤다.
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9 달팽이;
C언어를 배운지 벌써 3년이 지난 시점에 갑자기 달팽이 프로그램이 생각이 났다.
언어를 배울 당시 이 문제를 접하고서는 해결하지 못한체 기억속에서 사라졌다.
그래서 그런지 한 번 해볼까 란 생각 으로 프로그램에 대해서 생각해봤다.
1. 규칙
이 프로그램에서는 어떤 규칙이 있을까 생각을 했다.
2차원 배열을 사용해야 하니깐 먼저 방향을 생각했다.
→,↓으로 움직을때는 배열의 인덱스가 증가
←↑으로 움직일때는 배열의 인덱스 감소.
또하나의 규칙은 이 행렬을 돌면서의 각 숫자를 넣는 수가 일정하게 감소한다는것이다.
5X5 행렬에 자료값을 넣는다면 5,4,4,3,3,2,2,1,1 이 순서대로 자료값을 넣는다.(우측방향)
곧 저 순서는 (2*n-1) 이라는 식이 성립된다.
이 프로그램에서는 어떤 규칙이 있을까 생각을 했다.
2차원 배열을 사용해야 하니깐 먼저 방향을 생각했다.
→,↓으로 움직을때는 배열의 인덱스가 증가
←↑으로 움직일때는 배열의 인덱스 감소.
또하나의 규칙은 이 행렬을 돌면서의 각 숫자를 넣는 수가 일정하게 감소한다는것이다.
5X5 행렬에 자료값을 넣는다면 5,4,4,3,3,2,2,1,1 이 순서대로 자료값을 넣는다.(우측방향)
곧 저 순서는 (2*n-1) 이라는 식이 성립된다.
#include <stdio.h> #include <stdlib.h> int main(void){ int n = 0; // 입력받을 행렬의 크기값 int index; // 규칙을 사용하기 위해 int x=-1, y=0; //행렬의 이동값 int i, j, z; //for 루프를 위한 변수 int direction = 1; //행렬의 방향 '+' or '-' int **matrix = NULL; //동적배열을 만들기 위해 포인터의포인터 int cnt=1; //자료값 받기. printf("Input the Number : "); scanf("%d",&n); //C언어 임으로 동적메모리 할당. matrix = (int **)malloc(n * sizeof(int*)); for(z = 0;z < n; z++){ matrix[z] = (int*)malloc(n * sizeof(int)); } //전체적으로 돌아가는 for 루프 index = n - 1; for(z = 0; z < (2 * n - 1); z++){ //행이동 for 루프 for(i = 0; i <= index; i++ ){ x += direction; matrix[x][y] = cnt; cnt++; } //규칙적용 index--; //열이동 for 루프 for(j = 0 ;j <= index; j++){ y += direction; matrix[x][y] = cnt; cnt++; } //방향 지정 direction *= -1; } //출력 for(i = 0;i < n; i++){ for(j = 0;j < n; j++){ printf("%3d",matrix[j][i]); } printf("\n"); } free(matrix); //동적배열 해제 return 0; }
C언어를 생각해 만들어 최대한 C언어 답게 작성 해봤다.
-하지만 소스코드가 왜이렇게 지저분한지.. 변수들도 그렇고.. 나의 실력의 한계인가..
-나름 생각써 동적메모리할당으로 배열을 만들어야 겠다 생각해 포인터의 포인터를 써봤다.
-Visual C++은 역시 익숙치 않아서 그런지 compile 이나 link 중이라고 왜케 뜨는지.. 하소연 ㅠ
728x90
Comments