Search
Duplicate
🪄

5회차

날짜
2022/05/09
수행 내용
별찍기 복습, 배열 맛보기

별찍기 문제 풀이

백준 2438 별 찍기 - 1
#include <stdio.h> #include <string.h> #include <math.h> int main() { int num; scanf("%d", &num); // i가 1부터 시작하는 이유? : 별이 찍히는 최소 개수가 1개이기 때문 (본인이 편한대로) for (int i = 1; i <= num; i++) { for (int j = 0; j < i; j++) { printf("*"); } printf("\n"); } }
C
복사
백준 2439 별 찍기 - 2
#include <stdio.h> #include <string.h> #include <math.h> int main() { int num; scanf("%d", &num); /* 공백 4 별 1 -> j (1 ~ num-i) 공백 3 별 2 공백 2 별 3 공백 1 별 4 공백 0 별 5 */ for (int i = 0; i < num; i++) { // 공백 (N - i) for (int j = 1; j < num - i; j++) { printf(" "); } // 별 (i) for (int k = 0; k <= i; k++) { printf("*"); } printf("\n"); } }
C
복사
2021년 1학기 기말고사 콘테스트(1) D 별 찍기 - 안이 빈 사각형
#include <stdio.h> #include <string.h> #include <math.h> int main() { int testcase; scanf("%d", &testcase); for (int i = 0; i < testcase; i++) { int x, y; scanf("%d %d", &x, &y); // (x, y) == (1, 1)인 경우 처리 if (x == 1){ for (int i = 0; i < y; i++) { printf("*\n"); } continue; } else if (y == 1) { for (int i = 0; i < x; i++) { printf("*"); } } // 일반적인 경우 처리 -> 윗면, 중앙, 아랫면 -> 3개로 나눠서 별을 찍자! else { // 첫번째 for문 : 윗면 for (int i = 0; i < x; i++) { printf("*"); } printf("\n"); // 두번째 for문 : 중앙 for (int i = 0; i < y - 2; i++) { // 시작하는 별 printf("*"); if (x > 2 && y > 2) { // 공백 (안이 빈 사각형이어야 하므로 공백을 넣어주자!) // 시작하는 별과 끝내는 별을 따로 찍어주기로 했다. // 그렇다면 2개의 별을 제외한 개수만큼 공백을 찍어주자. for (int j = 0; j < x - 2; j++) { printf(" "); } } // 끝내는 별 printf("*\n"); } // 세번째 for문 : 아랫면 for (int i = 0; i < x; i++) { printf("*"); } } printf("\n"); } }
C
복사
2021년 1학기 기말고사 콘테스트(2) E 별 찍기 - 안이 빈 삼각형
#include <stdio.h> #include <string.h> #include <math.h> int main() { int testcase; scanf("%d", &testcase); while (testcase--) { int x; // 밑변의 길이(삼각형의 크기를 결정) scanf("%d", &x); // 변의 길이가 1인 경우를 처리함 if (x == 1) printf("*"); // 변의 길이가 2 이상인 경우를 처리함 if (x >= 2) { // 첫번째 for문 : 꼭짓점부터 밑변 전까지의 삼각형을 찍어주자 for (int i = 0; i < x - 1; i++) { if (i != 0) { // 첫 줄은 제외한다. (닫아주는 별 찍는 부분에서 처리) // 시작하는 별 printf("*"); } // 시작하는 별을 찍어줬으니 i - 1번 반복 for (int j = 0; j < i - 1; j++) { // 공백 -> 안이 빈 삼각형을 표현하자! printf(" "); } // 닫아주는 별 찍고 개행 // 첫 줄을 찍어주는 과정이라면, 꼭짓점 별을 의미한다. printf("*\n"); } // 두번째 for문 : 밑변 -> 입력받았던 변의 길이만큼 쭉 별을 찍어주자 for (int i = 0; i < x; i++) { printf("*"); } } printf("\n"); } }
C
복사

이론 (1) : 배열 기초

배열 생성

int a = 1, b = 2, c = 3; /* ... */ int j = 10; int scores[10]; float scores2[20]; char name[50]; // type name[size]; // 자료형 이름[크기];
C
복사

배열 요소 접근

배열을 순회하며 값 초기화하기
// 하나씩 초기화 scores[0] = 0; /* ... */ scores[9] = 90; // 중괄호로 초기화 scores[10] = { 0, 10, 20, /* ... */ , 90 }; // for문으로 초기화 for(int i = 0; i < 10; i++) { scores[i] = i * 10; }
C
복사
배열의 모든 값을 0으로 초기화
// for문 순회 초기화 for(int i = 0; i < 10; i++){ scores[i] = 0; } // 쉬운 방법! int scores[10] = { 0, };
C
복사
접근
int number; scanf("%d", &number); // 10 입력 scores[number] = 40; // scores[10] = 40; -> 값 대입 scores[2] = scores[number]; // scores[2] = scores[10] -> 값 복사
C
복사

배열 사용 시 주의할 점!

배열을 초기화하지 않으면 쓰레기값이 저장되어 있다.
int array[3]; print("%d", array[2]); // 이상한 쓰레기값이 출력됨
C
복사
배열의 인덱스는 0부터 시작한다.
int array[3] = { 1, 2, 3 }; // array[0] ~ array[2] for(int i = 1; i <= 3; i++){ print("%d", array[i]); // array[3] -> 인덱싱 오류! } // 올바른 접근 방법 for(int i = 0; i < 3; i++){ print("%d", array[i]); }
C
복사