티스토리 뷰
저는 강의에서 소개하는 3가지 방법의 구현들을 소개하도록 하겠습니다.
예제는 지그재그 형태의 배열을 예로 들겠습니다.
--------------------
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
-----------------------
1. 보수를 이용하는 방법 or 점점 빼가는 방식
가장 기본적인 방법이라고 생각합니다.
#include<stdio.h>
int main(void) {
int aList[5][5] = { 0 };
int i = 0, j = 0, nCounter = 0;
for (i = 0; i < 5; i++) {
if (i % 2 == 0) {
for (j = 0; j < 5; j++) {
aList[i][j] = ++nCounter;
}
}
else {
for (j = 0; j < 5 j++) {
aList[i][4 - j] = ++nCounter;
}
}
/* else {
for (j = 4; j >= 0; j--) {
aList[i][j] = ++nCounter;
}
} */
}
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%d\t", aList[i][j]);
}
printf("\n");
}
return 0;
}
2. 부호 변경 연산자를 활용하는 방법
#include<stdio.h>
int main(void) {
int aList[5][5] = { 0 };
int i = 0, j = 0, nCounter = 0, nOffset = 1;
for (i = 0; i < 5; ++i) {
// 홀수 행과 짝수 행을 구별하고 첫번째 요소의 초깃값을 결정한다.
if (i % 2 == 0)
nCounter = i * 5;
else
nCounter = (i + 1) * 5 + 1;
for (j = 0; j < 5; ++j) {
// nOffset이 양수면 nCounter는 증가하고, 음수면 반대로 감소한다.
nCounter += nOffset;
aList[i][j] = nCounter;
}
// 토글 스위치처럼 행마다 양수/음수로 변경된다.
// 여기서 '-'는 부호 변경 연산자이다.
nOffset = -nOffset;
}
for (i = 0; i < 5; ++i) {
for (j = 0; j < 5; ++j)
printf("%d\t", aList[i][j]);
putchar('\n');
}
return 0;
}
3. 플래그(flag) 라는 개념을 적용해서 교차를 구현.
#include<stdio.h>
int main(void) {
int aList[5][5] = { 0 };
// nFlag 변수는 반복문 내부에서 매번 참/거짓으로 바뀐다.
int i = 0, j = 0, nCounter = 0, nFlag = 1;
for (i = 0; i < 5; ++i) {
// 토글을 위한 플래그 변수
if (nFlag) {
// 정방향 채우기
for (j = 0; j < 5; ++j)
aList[i][j] = ++nCounter;
//다음 반복에서 거짓인 경우가 선택되도록 한다.
nFlag = 0;
}
else {
// 역방향 채우기
for (j = 0; j < 5; ++j)
aList[i][4 - j] = ++nCounter;
// 다음 반복에서 참인 경우가 선택되도록 한다.
nFlag = 1;
}
}
// 배열 출력
for (i = 0; i < 5; ++i) {
for (j = 0; j < 5; ++j)
printf("%d\t", aList[i][j]);
printf("\n");
}
return 0;
}
'언어 > C' 카테고리의 다른 글
메모리의 종류 / 직접 지정, 간접 지정 - 독하게 시작하는 C프로그래밍 (0) | 2019.09.18 |
---|---|
[Inflearn C] 달팽이 배열 Snail_Array (0) | 2019.09.09 |
[Inflearn C] 선택 정렬, 버블 정렬 (0) | 2019.09.07 |
[Inflearn_C] 다차원 배열 (0) | 2019.09.07 |
[Inflearn C] 연산자 (0) | 2019.09.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 공부
- Algorithm
- call by value
- 재귀함수
- 알고리즘
- 파이썬
- 강의
- 다차원 배열
- 회전리스트
- 배열
- 비트필드
- inflearn
- codeit
- 시간복잡도
- call by reference
- 구조체
- 공용체
- 공간복잡도
- 프로그래밍
- 3차원 배열
- 종류
- 1차원 배열
- 자료구조
- timecomplexity
- 직접 지정
- 포인터
- C
- 2차원 배열
- 형승격
- 간접 지정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함