탐색
가이드
@chamkkae
전체 보기
프로젝트
포스트
팔로잉
스크랩
전체 보기
프로젝트
포스트
팔로잉
스크랩
프로젝트 히스토리
프로젝트 상세 페이지
타임라인
리스트
2022.02.26
@chamkkae님이 포스트를 업데이트했습니다.
포스트
15일차 - C언어 문제은행 2월 과정
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가 변하는 총 횟수를 결과로 출력했습니다.
2022.02.24
@chamkkae님이 포스트를 업데이트했습니다.
포스트
2일차 - C언어 문제은행 2월 과정
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로-손쉽게-만들어-봅시다
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; } <실행 결과>
2022.02.22
@skdus3373님이
12일차 - C언어 문제은행 2월 과정
포스트를 좋아합니다.
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); } <실행 결과>
2022.02.21
@chamkkae님이 새 포스트를 작성했습니다.
11일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> #include <stdlib.h> // abs 함수가 선언된 헤더 파일 int main() { // 변수 선언 int distance = 0; char word1[11], word2[11]; // 두 단어 입력 printf("단어 입력: "); scanf("%s %s", word1, word2); // 반복문을 이용한 거리의 합 계산 for (int i = 0; word1[i] != '\0'; i++) { distance += abs(word1[i] - word2[i]); } // 알파벳 거리 출력 printf("거리 출력: %d", distance); return 0; } <실행 결과>
2022.02.19
@chamkkae님이 포스트를 업데이트했습니다.
포스트
8일차 - C언어 문제은행 2월 과정
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; } <실행 결과>
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); } } <실행 결과>
2022.02.16
@chamkkae님이 포스트를 업데이트했습니다.
포스트
8일차 - C언어 문제은행 2월 과정
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)); } } <실행 결과>
2022.02.15
@chamkkae님이 새 포스트를 작성했습니다.
7일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> int main() { // 변수 선언 char result[101]; int add = 0; int score = 0; // OX퀴즈 결과 입력 printf("OX퀴즈 결과: "); scanf("%s", result); // 반복문을 이용한 점수 계산 for (int i = 0; result[i] != '\0'; i++) { if (result[i] == 'O') { add += 1; score += add; } else { add = 0; } } // OX퀴즈 점수 출력 printf("OX퀴즈 점수: %d점", score); return 0; } <실행 결과>
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); } <실행 결과>
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; } <실행 결과>
2022.02.10
@chamkkae님이 새 포스트를 작성했습니다.
4일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> #include <string.h> // strlen 함수가 선언된 헤더 파일 int main() { // 변수 선언 char word[101]; int N; // 단어 입력 printf("단어 입력: "); scanf("%s", word); // 단어 길이를 2로 나눈 몫을 N에 대입 N = strlen(word) / 2; // 가운데 글자 출력 printf("가운데 글자: "); if (strlen(word) % 2) { printf("%c", word[N]); } else { printf("%c%c", word[N - 1], word[N]); } return 0; } <실행 결과>
2022.02.08
@chamkkae님이 새 포스트를 작성했습니다.
3일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 소인수분해 함수 선언 void primeFactorization(int num); int main() { // int형 변수 선언 int N; // 숫자 입력 printf("숫자를 입력해주세요: "); scanf("%d", &N); // 소인수분해 함수 적용 primeFactorization(N); return 0; } // 소인수분해 함수 정의 void primeFactorization(int num) { int i = 2; while (num != 1) { if (num % i == 0) { num /= i; printf("%d\n", i); } else { i++; } } } <실행 결과>
2022.02.07
@chamkkae님이 포스트를 업데이트했습니다.
포스트
2일차 - C언어 문제은행 2월 과정
2022.02.07
@chamkkae님이 포스트를 업데이트했습니다.
포스트
2일차 - C언어 문제은행 2월 과정
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
2022.02.04
@chamkkae님이 새 포스트를 작성했습니다.
1일차 - C언어 문제은행 2월 과정
문제 조건에 맞춰 코드를 작성해 보았습니다! <소스코드> #include <stdio.h> // 포인터 변경 함수 선언 void changePointer(int *ptr1, int *ptr2); int main() { // int형 변수 선언 int a, b; // 숫자 2개 입력 printf("숫자 입력: "); scanf("%d %d", &a, &b); // 포인터 변경 함수 적용 changePointer(&a, &b); // 결과 출력 printf("결과 출력: %d %d", a, b); return 0; } // 포인터 변경 함수 정의 void changePointer(int *ptr1, int *ptr2) { int N; N = *ptr1; *ptr1 = *ptr2; *ptr2 = N; } <실행 결과>