새싹교실/2020/이찌반/전성수 (rev. 1.11)
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
for (int i = n; i > 0; i--) {
if (n % i == 0) {
answer += i;
}
else continue;
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool solution(int x) {
bool answer = true;
int sum = 0;
while (1) {
sum += x % 10;
if (x / 10 < 10) {
sum += x / 10;
break;
}
else {
x /= 10;
}
}
if (x % sum == 0) answer = true;
else answer = false;
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(int n) {
char* answer = (char*)malloc(n * 3);
char* a = "수";
char* b = "박";
for (int i = 0; i < n; i++) {
strcpy(&answer[i * 3], i % 2 ? b : a);
}
return answer;
}
1.4. 두개 뽑아서 더하기 ¶
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define SWAP(a, b) {int t = a; a = b; b = t;}
int* solution(int numbers[], size_t numbers_len) {
int length = 0;
int* answer = (int*)malloc(sizeof(int) * 100);
for (int i = 0; i < numbers_len - 1; i++) {
for (int j = i + 1; j < numbers_len; j++) {
int add = numbers[i] + numbers[j];
int check = 1;
for (int k = 0; k < length; k++) {
if (answer[k] == add) check = 0;
}
if (check == 1) {
answer[length] = add;
length++;
}
}
}
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - 1; j++) {
if (answer[j] > answer[j + 1]) SWAP(answer[j], answer[j + 1]);
}
}
return answer;
}
#include <stdio.h>
int main(void) {
int a;
int b;
scanf_s("%d %d", &a, &b);
printf("%d\n", a + b);
for (int i = 0; i < b; i++) {
for (int j = 0; j < a; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#define SWAP(a,b) {int t = a;a = b;b = t;}
char* solution(const char* s) {
int cnt = strlen(s);
char* answer = (char*)malloc(sizeof(char) * cnt);
for (int i = 0; i <= cnt; i++) {
answer[i] = s[i];
}
for (int i = 0; i < cnt; i++) {
for (int j = 0; j < cnt - 1; j++) {
if (answer[j] <= answer[j + 1]) {
SWAP(answer[j], answer[j + 1]);
}
}
}
return answer;
}
1.7. 문자열을 정수로 바꾸기 ¶
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(const char* s) {
int answer = 0;
answer = atoi(s);
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
bool solution(const char* s) {
bool answer = true;
int count = strlen(s);
for (int i = 0; i < count; i++) {
if (isalpha(s[i])) {
answer = false;
}
}
if ((count == 4 || count == 6) != 1) {
answer = false;
}
return answer;
}
1.9. 두 정수 사이의 합 ¶
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
long long solution(int a, int b) {
long long answer = 0;
long long sum = 0;
if (a > b) {
for (int i = b; i <= a; i++) {
sum += i;
}
answer = sum;
}
else if (a < b) {
for (int i = a; i <= b; i++) {
sum += i;
}
answer = sum;
}
else {
answer = a;
}
return answer;
}
1.10. 가운데 글자 가져오기 ¶
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(const char* s) {
char* answer;
int cnt = strlen(s);
if (cnt % 2) {
answer = (char*)malloc(sizeof(char));
answer[0] = s[cnt / 2];
answer[1] = '\0';
}
else {
answer = (char*)malloc(sizeof(char) * 2);
answer[0] = s[(cnt / 2) - 1];
answer[1] = s[cnt / 2];
answer[2] = '\0';
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(int a, int b) {
char* answer = (char*)malloc(sizeof(char) * 10);
int day = b;
int month[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for (int i = 0; i < a; i++) {
day += month[i - 1];
}
switch (day % 7) {
case 0: answer = "THU"; break;
case 1: answer = "FRI"; break;
case 2: answer = "SAT"; break;
case 3: answer = "SUN"; break;
case 4: answer = "MON"; break;
case 5: answer = "TUE"; break;
case 6: answer = "WED"; break;
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
while (1) {
answer += n % 10;
n /= 10;
if (n / 10 == 0) {
answer += n;
break;
}
}
return answer;
}
1.13. 자연수를 뒤집어 배열로 만들기 ¶
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(long long n) {
int i = 0;
int* answer = (int*)malloc(sizeof(int) * 11);
do {
answer[i++] = n % 10;
n /= 10;
} while (n > 0);
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
long long solution(long long n) {
long long answer = 0;
if ((int)sqrt(n) == sqrt(n)) {
answer = (sqrt(n) + 1) * (sqrt(n) + 1);
}
else answer = -1;
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(int num) {
char* answer;
if(num %2) {
answer = (char*)malloc(sizeof(char)*3);
answer = "Odd";
}
else {
answer = (char*)malloc(sizeof(char)*4);
answer = "Even";
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int num) {
unsigned long long tmp = num;
int answer = 0;
for(answer = 0;;answer++) {
if(tmp%2) {
if(tmp == 1) break;
tmp = (tmp*3) + 1;
}
else {
tmp /= 2;
}
}
if(answer >= 500) answer = -1;
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
double solution(int arr[], size_t arr_len) {
double answer = 0;
int sum = 0;
for(int i = 0;i<arr_len;i++) {
sum += arr[i];
}
answer = (double)sum/arr_len;
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(const char* phone_number) {
char* answer = (char*)malloc(sizeof(char)*strlen(phone_number)+1);
strcpy(answer, phone_number);
for(int i = 0;i<strlen(phone_number)-4;i++) {
answer[i]='*';
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(const char* s) {
char* answer = (char*)malloc(sizeof(char)*strlen(s)+1);
int i = 0, index = 0;
strcpy(answer, s);
while(answer[index] != '\0'){
if(answer[index] == ' ') {
i = 1;
}
else if((i%2 == 0) && (answer[index] > 96)) {
answer[index] -= 32;
}
else if((i%2 == 1) && (answer[index] < 91)) {
answer[index] += 32;
}
i++;
index++;
}
return answer;
}