U E D R , A S I H C RSS

새싹교실/2020/이찌반/정동원 (rev. 1.21)

새싹교실/2020/이찌반/정동원


1. 코딩테스트 1단계



1.1. 두 개 뽑아서 더하기

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int compare(void *a,void *b);
int* solution(int numbers[], size_t numbers_len) {

    qsort(numbers,numbers_len,sizeof(int),compare);
    int* temp = (int*)malloc(sizeof(int)*201);
    memset(temp,0,sizeof(int));
    
    int i,j,k,n=0;
    for (i = 0; i < numbers_len - 1; ++i){
        for(j = i+1; j < numbers_len; ++j){
            int count = 0;
            for(k=0; k < n; ++k){
                if(temp[k] == numbers [i] + numbers[j]){
                    ++count;
                }
            }
            if(count == 0){
                temp[n] = numbers [i] + numbers[j];
            ++n;
            }           
        }
    }

    qsort(temp,n,sizeof(int),compare);
    int* answer = (int*)malloc(sizeof(int)*n);
    for (i = 0; i < n; ++i){
        answer[i]= temp[i];
    }
    free(temp);
    return answer;
}

int compare(void *a,void *b){
    int num1 = *(int *)a;
    int num2 = *(int *)b;
    return num1 - num2;
}

1.2. 2016년

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

char* solution(int a, int b) {
    int days[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    char week[7][4] = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
    char* answer = (char*)malloc(sizeof(char)*4);

    int i, d, n=-1;

    for (i = 0; i < a - 1; ++i) {
        n += days[i];
    }
    n += b;
    d = n % 7;

    strcpy(answer, week[d]);
    return answer;
}

1.3. 가운데 글자 가져오기

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

char* solution(const char* s) {
    int len = strlen(s);
    if (len % 2) {
        char* answer = (char*)malloc(sizeof(char) * 2);
        answer[0] = s[len / 2];
        answer[1] = '\0';
        printf("%s", answer);
        return answer;
    }else{
        char* answer = (char*)malloc(sizeof(char) * 3);
        answer[0] = s[len / 2 - 1];
        answer[1] = s[len / 2];
        answer[2] = '\0';
        printf("%s", answer);
        return answer;
    }
}

1.4. 두 정수 사이의 합

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

long long solution(int a, int b) {
    long long answer = 0;
    int i;
    if (a>b){
        int temp;
        temp = b;
        b = a;
        a = temp;
    }
    for (i = a; i <= b ; ++i){
        answer += i;
    }
    return answer;
}

1.5. 문자열 내림차순으로 배치하기

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>


char* solution(const char* s) {
    int i,j, len =strlen(s);
    char* answer = (char*)malloc(sizeof(char)*len + 1);
    strcpy(answer,s);
    
    for(i = len; i > 0; --i){
        for(j = 0; j < i - 1; ++j){
            if (answer[j] < answer[j+1]){
                char temp;
                temp = answer[j+1];
                answer[j+1] = answer[j];
                answer[j] = temp;
            }
        }
    }
    
    return answer;
}

1.6. 문자열 다루기 기본

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

bool solution(const char* s) {
    bool t1, t2, answer;
    int i, count, len = strlen(s);
    if(len == 4 || len == 6){
        t1 = true;
    }else{
        t1 = false;
    }
    
    count = 0;
    for(i = 0 ;i < len; ++i){
        if(isdigit(s[i])){
            ++count;
        }
    }
    
    if(count == len){
        t2 = true;
    }else{
        t2 = false;
    }
    
    if(t1&&t2){
        answer = true;
    }else{
        answer = false;
    }
    
    return answer;
}

1.7. 수박수박수박수박수박수?

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

char* solution(int n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    char* answer = (char*)malloc(sizeof("수") * n + 1);
    int i;
    memset(answer,'\0',sizeof("수") * n + 1);
    for(i = 0;i < n; ++i){
        if(i%2==0){
            strcat(answer,"수");
        }else{
            strcat(answer,"박");
        }
        answer[n*sizeof("수")] = '\0';
    }
    return answer;
}

1.8. 문자열을 정수로 바꾸기

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(const char* s) {
    int answer = atoi(s);
    return answer;
}

1.9. 약수의 합

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n) {
    int i, answer = 0;
    for(i = 1; i <= n; ++i){
        if(n%i == 0){
             answer += i;
        }
    }
    
    return answer;
}

1.10. 이상한 문자 만들기

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


char* solution(const char* s){
    const int len = strlen(s);
    char* answer = (char*)malloc(sizeof(char) * strlen(s) + 1);
    int i = 0, count = 0;
    memset(answer, '\0', sizeof(char) * strlen(s) + 1);
    while (count < len) {
        if (s[count] != ' ') {
            if (i % 2 == 0) {
                answer[count] = (char)toupper(s[count]);

            }
            else {
                answer[count] = (char)tolower(s[count]);
            }
            i++;
        }
        else {
            answer[count] = s[count];
            i = 0;
        }          
        count++;
    }
    answer[strlen(s)] = '\0';
    return answer;
}

1.11. 자릿수 더하기

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>

int solution(int n) {
    int i = 0, answer = 0;
    while (n % (int)pow(10, i) != n) {
        answer += (n % (int)pow(10, i + 1))/(int)pow(10, i);
        i++;
    }
    return answer;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-16 14:07:54
Processing time 0.0212 sec