0부터 9까지 몇번 사용됬는지 저장할 공간을 int형 포인터에 int 자료형 크기로 10개 할당하였다.

자연수 세개를 입력받아, 입력받은 자연수 3개를 곱한다.

곱한 값이 0보다 클때까지 반복하고 반복문 안에는 곱한 값을 10으로 나눈 나머지를 배열의 인덱스로 하여 그 숫자가 나올때 마다 해당 인덱스에 1씩 누적하고 곱한 값을 10으로 나눈다.

할당한 메모리를 해제하고 종료한다.

정답은 다음 코드와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a, b, c, mul, i;
    int *numPtr = (int*)malloc(sizeof(int* 10);
    scanf("%d %d %d"&a, &b, &c);
    mul = a * b * c;
    
    while(mul > 0)
    {
        i = mul % 10;
        numPtr[i] = numPtr[i] + 1;
        mul /= 10;
    }
    
    for(int i=0; i<10; i++
    {
        printf("%d\n", numPtr[i]);
    }
    free(numPtr);
    return 0;
}
cs

과목의 개수를 저장할 변수, 평균을 저장할 변수, 점수 중 최댓값을 저장할 변수를 선언하고 점수들을 저장할 공간의 포인터를 선언하고, 과목의 개수를 입력받는다.

점수를 고치는 연산을 하며 소수가 될 수 있으므로 double 자료형 크기의 과목 개수만큼 저장할 수 있도록 메모리를 할당한다.

과목의 개수 만큼 반복하면서 최댓값을 찾고, 또 과목의 개수만큼 반복하면서 각 점수를 최댓값을 사용하여 문제에서 주어진 식으로 연산하여 저장한다.

연산한 점수들을 평균을 저장할 avg변수에 누적하여 저장하고, avg를 과목의 개수로 나누어 평균을 구한다.

메모리를 해제하고, 구한 평균을 출력한다.

정답 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int subNum = 0;
    double avg = 0, big = 0;
    double *subArr;
    
    scanf("%d"&subNum);
    
    subArr = (double*)malloc(sizeof(double* subNum);
    
    for(int i = 0; i < subNum; i++)
    {
        int tmp;
        scanf("%d"&tmp);
        subArr[i] = double(tmp);
        
    }
 
    for(int i = 0; i < subNum; i++)
    {
        if(subArr[i] > big)
            big = subArr[i];
    }
 
    for(int i = 0; i < subNum; i++)
    {
        subArr[i] = subArr[i]/big*100;
    }
 
    for(int i = 0; i < subNum; i++)
    {
        avg += subArr[i];
    }
    avg = avg / subNum;
    
    free(subArr);
    printf("%lf", avg);
    return 0;
}
cs

크기가 9인 int형 배열을 선언하고, 그 배열을 포인터에 저장한다.

최댓값과 최댓값의 위치를 저장할 변수를 선언하고 0으로 초기화한다.

반복문으로 9번 반복하면서 포인터에 저장된 주솟값으로 배열에 값을 저장한다.

반복문으로 0부터 9까지 반복하면서 각 인덱스가 max보다 큰지 비교하고, 크면 max에 그 값을 저장하고, loc에 그 인덱스를 저장한다.

반복문이 끝나면 max값과 인덱스는 0부터 시작하기 때문에 loc + 1을 출력한다.

정답은 다음 코드와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main()
{
    int arr[9];
    int *numList = arr;
    int max = 0, loc = 0;
    
    for(int i = 0; i < 9; i++)
    {
        scanf("%d"&numList[i]);
    }
    for(int i = 0; i < 9; i++)
    {
        if(numList[i] > max)
        {
            max = numList[i];
            loc = i;
        }
    }
    
    printf("%d\n%d", max, loc+1);
    return 0;
}
cs

테스트 케이스의 개수를 입력받고, 개수 만큼 반복한다.

반복문 안에는 char 자료형 크기 80개를 저장할 수 있는 메모리 공간을 할당하고, 그 공간에 문자열을 입력받는다.

점수를 누적할 변수 sum과 점수를 다음 추가할 점수를 저장할 변수 score를 만들고 sum은 0으로, score는 1로 초기화 한다.

입력받은 문자열의 길이 만큼 반복하여 'O'이면 score의 값을 sum에 누적시키고 score의 값을 1 증가시킨다. 'X'면 score의 값을 1로 초기화 한다.

입력 받은 문자열의 개수는 string.h헤더파일의 strlen()함수를 이용하면 구할 수 있다.

정답은 다음 코드와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
int main()
{
    int cnt;
    scanf("%d",&cnt);
    
    for(int i=0; i<cnt; i++)
    {
        char *result = malloc(sizeof(char* 80);
        int score = 1,sum = 0;
        scanf("%s",result);
        
        for(int j=0; j < strlen(result); j++)
        {
            if(result[j]=='O')
            {
                sum += score;
                score++;
            }
            else
            {
                score = 1;
            }
        }
        printf("%d\n",sum);
        free(result); 
    }
    
    return 0;
}
 
cs

+ Recent posts