chamkkae
2022.02.25
@chamkkae님이 새 포스트를 작성했습니다.
15일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 2차원 배열 정렬 함수 선언 void sort(int n, int arr[n][2]); int main() {     // int형 변수 선언     int N, count = 1;     // 회의 개수 입력     printf("  회의 개수: ");     scanf("%d", &N);     // 반복문을 이용한 각 회의의 시작&종료시간 입력     int time[N][2];     for (int i = 0; i < N; i++) {         printf("%2d번째 회의: ", i + 1);         scanf("%d %d", &time[i][0], &time[i][1]);     }     // 2차원 배열 정렬 함수 적용     sort(N, time);     // 반복문을 이용한 회의 최댓값 계산     int flag = time[0][1];     for (int i = 1; i < N; i++) {         if (time[i][0] >= flag) {             flag = time[i][1];             count++;         }     }     // 결과 출력     printf("  결과 출력: %d", count);     return 0; } // 2차원 배열 정렬 함수 정의 void sort(int n, int arr[n][2]) {     // int형 변수 선언     int idx, temp0, temp1;     // 반복문을 이용한 종료시간 최솟값 선택     for (int x = 0; x < n - 1; x++) {         idx = x;         for (int y = x + 1; y < n; y++) {             if (arr[idx][1] > arr[y][1]) {                 idx = y;             } else if (arr[idx][1] == arr[y][1]) {                 if (arr[idx][0] > arr[y][0]) {                     idx = y;                 }             }         }         // 종료시간 기준으로 오름차순 정렬         temp0 = arr[x][0];         temp1 = arr[x][1];         arr[x][0] = arr[idx][0];         arr[x][1] = arr[idx][1];         arr[idx][0] = temp0;         arr[idx][1] = temp1;     } } <실행 결과> 아래 사진에서 아이디어를 얻어 코드를 구현했습니다. (출처: https://st-lab.tistory.com/145) 각 회의의 시작&종료시간을 입력 받고, 종료시간을 기준으로 오름차순 정렬을 진행했습니다. 정렬된 배열에서 종료시간이 가장 빠른 회의는 첫 번째 원소이므로, 첫 원소의 종료시간을 flag로 설정했습니다. 두 번째 원소의 시작시간이 flag보다 빠르면 넘어가고, 그렇지 않으면 flag에 시작시간을 대입하도록 설계했습니다. 이를 마지막 원소까지 반복해 flag가 변하는 총 횟수를 결과로 출력했습니다.
chamkkae
2022.02.24
@chamkkae님이 새 포스트를 작성했습니다.
14일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> #include <string.h> // strlen 함수가 선언된 헤더 파일 #include <stdlib.h> // atoi, itoa 함수가 선언된 헤더 파일 #include <math.h> // sqrt 함수가 선언된 헤더 파일 // 부분 문자열, 소수 판별 함수 선언 char *substring(int a, int b, char *s); int isPrime(int n); int main() {     // 변수 선언     char N[101], M[101];     int flag = 0, A = 0, B;     // 숫자 입력     printf("숫자 입력: ");     scanf("%s", N);         // 반복문을 이용한 부분 문자열 생성 및 소수 판별     for (int i = strlen(N) - 1; i >= 0; i--) {         for (int j = 0; i + j < strlen(N); j++) {             B = atoi(substring(j, i + j, N));             itoa(B, M, 10);             if ((strlen(M) == i + 1) && (B > A) && isPrime(B)) {                 A = B;                 flag = 1;             }         }         if (flag) {             break;         }     }     // 결과 출력     printf("결과 출력: %d", A);     return 0; } // 부분 문자열 함수 정의 char *substring(int a, int b, char *s) {     char *result = malloc(sizeof(char) * (2 - a + b));     strncpy(result, s + a, 1 - a + b);     result[1 - a + b] = 0;     return result; } // 소수 판별 함수 정의 int isPrime(int n) {     // 소수가 아닐 경우 0 반환     if (n < 2) {         return 0;     }     for (int x = 2; x <= sqrt(n); x++) {         if (n % x == 0) {             return 0;         }     }     // 소수일 경우 1 반환     return 1; } <실행 결과> 아래는 제가 과제를 풀면서 참고한 C언어 관련 페이지입니다. - C언어 substring 구현(strncpy 함수): https://codingdog.tistory.com/entry/c언어-substring-구현-strncpy로-손쉽게-만들어-봅시다
chamkkae
2022.02.23
@chamkkae님이 새 포스트를 작성했습니다.
13일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 이진 탐색 함수 선언 int BinarySearch(int n, int x, int *arr); int main() {     // 변수 선언     int N, X;     char S[101];     // 숫자&배열&목표 입력     printf("숫자 입력: ");     scanf("%d", &N);     printf("배열 입력: ");     scanf(" %[^\n]s", S);     printf("목표 입력: ");     scanf("%d", &X);     // 반복문을 이용한 int형 배열 구성     int num = 0, cnt = 0;     int array[N + 1];     for (int i = 0; S[i] != '\0'; i++) {         if (S[i] != ' ') {             num = num * 10 + S[i] - '0';         } else {             array[cnt++] = num;             num = 0;         }     }     array[cnt] = num;     // 함수 적용 및 결과 출력     printf("결과 출력: %d", BinarySearch(N, X, array));     return 0; } // 이진 탐색 함수 정의 int BinarySearch(int n, int x, int *arr) {     // int형 변수 선언     int L = 0, R = n - 1, M;     // 반복문을 이용한 결과 도출     while (L <= R) {         M = (L + R) / 2;         if (arr[M] == x) {             return 1;         } else if (arr[M] > x) {             R = M - 1;         } else {             L = M + 1;         }     }     return 0; } <실행 결과>
skdus3373
2022.02.22
@skdus3373님이
12일차 - C언어 문제은행 2월 과정
포스트를 좋아합니다.
chamkkae
2022.02.22
@chamkkae님이 새 포스트를 작성했습니다.
12일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 분수 함수 선언 void fraction(int N); int main() {     // int형 변수 선언     int n;     // 숫자 입력     printf("숫자 입력: ");     scanf("%d", &n);     // 함수 적용 및 결과 출력     fraction(n);     return 0; } // 분수 함수 정의 void fraction(int N) {     // int형 변수 선언     int S = 1;     int x, y;     // 반복문을 이용한 행&열 계산     while (N - S > 0) {         N -= S;         S++;     }     // x에 분모를, y에 분자를 대입     if (S % 2) {         x = S - N + 1;         y = N;     } else {         x = N;         y = S - N + 1;     }     // 분수 형태로 결과 출력     printf("결과 출력: %d/%d", x, y); } <실행 결과>
chamkkae
2022.02.18
@chamkkae님이 새 포스트를 작성했습니다.
10일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> #include <math.h> // ceil 함수가 선언된 헤더 파일 // 달팽이 함수 선언 int snail(double a, double b, double n); int main() {     // int형 변수 선언     int A, B, N;     // 숫자 입력     printf("숫자 입력: ");     scanf("%d %d %d", &A, &B, &N);     // 함수 적용 및 결과 출력     printf("결과 출력: %d", snail(A, B, N));     return 0; } // 달팽이 함수 정의 int snail(double a, double b, double n) {     if (a <= b) {         if (a < n) {             return -1;         }         return 1;     }     return ceil((n - a) / (a - b)) + 1; } <실행 결과>
chamkkae
2022.02.17
@chamkkae님이 새 포스트를 작성했습니다.
9일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 자릿수 제곱의 합 계산, 배열 포함 여부, 상근수 판별 함수 선언 int calculate(int num); int include(int *arr, int n, int i); void check(int num); int main() {     // int형 변수 선언     int N;     // 양의 정수 N 입력     printf("숫자 입력: ");     scanf("%d", &N);     // 반복문을 이용한 함수 적용 및 결과 출력     printf("상근수: 1");     if (N > 6) {         for (int i = 7; i <= N; i++) {             check(i);         }     }     return 0; } // 자릿수 제곱의 합 계산 함수 정의 int calculate(int num) {     // int형 변수 x 선언     int x = 0;     // 반복문을 이용한 자릿수 제곱의 합 계산     while (num > 0) {         x += (num % 10) * (num % 10);         num /= 10;     }     // x 반환     return x; } // 배열 포함 여부 함수 정의 int include(int *arr, int n, int i) {     // 반복문을 이용한 포함 여부 판별     for (int j = 0; j <= i; j++) {         if (arr[j] == n) {             return 0;         }     }     // 배열이 n을 포함하지 않은 경우 1 반환     return 1; } // 상근수 판별 함수 정의 void check(int num) {     // int형 변수 선언     int A[101];     int n = num;     int idx = 0, flag = 1;     // 반복문을 이용한 상근수 판별     while (n != 1) {         A[idx] = n;         n = calculate(n);         if (include(A, n, idx) == 0) {             flag = 0;             break;         }         idx++;     }     // 상근수일 경우 숫자 출력     if (flag == 1) {         printf(", %d", num);     } } <실행 결과>
chamkkae
2022.02.16
@chamkkae님이 새 포스트를 작성했습니다.
8일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 숫자 뒤집기, 소수 판별 함수 선언 int reverseNum(int num); void isPrime(int num); int main() {     // 변수 선언     int N;     // 숫자 개수 입력 및 배열 선언     printf("입력받을 숫자의 개수를 입력해주세요: ");     scanf("%d", &N);     int number[N];     // 반복문을 이용한 배열 원소 입력     for (int i = 0; i < N; i++) {         printf("각 %d번째 숫자를 입력해주세요: ", i + 1);         scanf("%d", &number[i]);     }     // 반복문을 이용한 소수 뒤집기 및 소수 판별     printf(">>> 뒤집었을 때 소수인 숫자:");     for (int j = 0; j < N; j++) {         isPrime(reverseNum(number[j]));     }     return 0; } // 숫자 뒤집기 함수 정의 int reverseNum(int num) {     // int형 변수 선언     int add;     int rev = 0;     // 반복문을 이용한 뒤집은 숫자 도출     while (num > 0) {         add = num % 10;         rev = rev * 10 + add;         num /= 10;     }     // 뒤집은 숫자 반환     return rev; } // 소수 판별 함수 정의 void isPrime(int num) {     // int형 변수 선언     int flag = 1;     // 소수가 아닐 경우 flag에 0 대입     if (num < 2) {         flag = 0;     } else {         for (int i = 2; i < num; i++) {             if (num % i == 0) {                 flag = 0;                 break;             }         }     }     // flag가 1일 경우 뒤집은 숫자 출력     if (flag == 1) {         printf(" %d", reverseNum(num));     } } <실행 결과>
chamkkae
2022.02.14
@chamkkae님이 새 포스트를 작성했습니다.
6일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 최대공약수, 덧셈, 곱셈 함수 선언 int GCD(int n, int d); void add(int x1, int x2, int y1, int y2); void multiply(int x1, int x2, int y1, int y2); int main() {     // 변수 선언     int a1, a2, b1, b2;     char c;     // 분수 연산 입력     printf("연산 입력: ");     scanf("%d/%d%c%d/%d", &a1, &a2, &c, &b1, &b2);     // 연산자에 따른 함수 적용     printf("계산 결과: ");     if (c == '+') {add(a1, a2, b1, b2);}     else if (c == '-') {add(a1, a2, -b1, b2);}     else if (c == '*') {multiply(a1, a2, b1, b2);}     else if (c == '/') {multiply(a1, a2, b2, b1);}     return 0; } // 최대공약수 함수 정의 int GCD(int n, int d) {     // 절댓값 변환     n = n > 0 ? n : -n;     d = d > 0 ? d : -d;     // 최솟값을 변수에 대입     int S = n < d ? n : d;     // 반복문을 이용한 최대공약수 도출     for (int i = S; i > 0; i--) {         if ((n % i == 0) && (d % i == 0)) {             return i;         }     } } // 덧셈 함수 정의 void add(int x1, int x2, int y1, int y2) {     int N = x1 * y2 + x2 * y1;     int D = x2 * y2;     int G = GCD(N, D);     printf("%d/%d", N / G, D / G); } // 곱셈 함수 정의 void multiply(int x1, int x2, int y1, int y2) {     int N = x1 * y1;     int D = x2 * y2;     int G = GCD(N, D);     printf("%d/%d", N / G, D / G); } <실행 결과>
chamkkae
2022.02.11
@chamkkae님이 새 포스트를 작성했습니다.
5일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 자릿수 합계 함수 선언 int DigitSum(int num); int main() {     // int형 변수 선언     int N;     int M = 0;     int S = 0;     // 반복문을 이용한 숫자 입력     printf("< 자연수 5개 입력 >\n");     for (int i = 1; i < 6; i++) {         printf("%d번째 수: ", i);         scanf("%d", &N);         // 조건문을 이용한 크기 비교         if (DigitSum(N) > S) {             M = N;             S = DigitSum(N);         }     }     // 결과 출력     printf("\n< 자릿수의 합이 최대인 수 >\n%d", M);         return 0; } // 자릿수 합계 함수 정의 int DigitSum(int num) {     int sum = 0;     while (num) {         sum += (num % 10);         num /= 10;     }     return sum; } <실행 결과>
chamkkae
2022.02.07
@chamkkae님이 새 포스트를 작성했습니다.
2일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> #include <string.h> // strtok 함수가 선언된 헤더 파일 #include <stdlib.h> // atoi 함수가 선언된 헤더 파일 int main() {     // 변수 선언     char problem[51];     int result = 0;     // 덧셈 입력     printf("덧셈 입력: ");     scanf("%s", problem);     // 연산자를 기준으로 문자열 분리     char *plus = strtok(problem, "+");         // 반복문을 이용한 계산     while (plus != NULL) {         result += atoi(plus);         plus = strtok(NULL, "+");     }     // 결과 출력     printf("계산 결과: %d", result);         return 0; } <실행 결과> 이번 과제를 파이썬으로 풀어봤는데 코드 한 줄로 완성되더라구요. print(f"계산 결과: {sum(map(int, input('덧셈 입력: ').split('+')))}") 새삼 파이썬이 얼마나 편리한 언어인지 깨달았네요ㅋㅋㅋㅋㅋ 아래는 제가 과제 풀면서 참고한 C언어 관련 페이지입니다. - 문자를 기준으로 문자열 자르기: https://dojang.io/mod/page/view.php?id=376 - 문자열을 정수로 변환하기: https://dojang.io/mod/page/view.php?id=385