10818 최소, 최대
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n);
int* ptr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) scanf("%d", &ptr[i]);
int min = ptr[0];
int max = ptr[0];
for (int i = 1; i < n; i++)
{
if (min > ptr[i]) min = ptr[i];
if (max < ptr[i]) max = ptr[i];
}
printf("%d %d", min, max);
free(ptr);
return 0;
}
동적할당을 사용해서 배열을 선언한다. 반복문을 돌면서 최댓값과 최솟값을 구해 출력한다.
2562 최댓값
#include <stdio.h>
int main()
{
int arr[10];
for (int i = 0; i < 9; i++) scanf("%d", &arr[i]);
int index = 1, max = arr[0];
for (int i = 1; i < 9; i++)
{
if (max < arr[i])
{
max = arr[i];
index = i + 1;
}
}
printf("%d\n", max);
printf("%d", index);
return 0;
}
몇 번째 수인지 출력할 때의 순서는 1부터 세는 것을 유의해서 최댓값의 인덱스에 1을 더해 출력할 값을 구한다.
3052 나머지
#include <stdio.h>
int countNumber(int arr[], int size)
{
int result = 0;
for (int i = 0; i < size - 1; i++) for (int j = i + 1; j < size; j++) if (arr[i] == arr[j]) arr[j] = -1;
for (int i = 0; i < size; i++) if (arr[i] != -1) result++;
return result;
}
int main()
{
int arr[11], rest[11], result[11] = {0};
for (int i = 0; i < 10; i++) scanf("%d", &arr[i]);
for (int i = 0; i < 10; i++) rest[i] = arr[i] % 42;
printf("%d", countNumber(rest, 10));
return 0;
}
입력받은 값들을 42로 나눈 나머지를 구해서 rest라는 배열에 저장한다.
countNumber라는 함수에서는 배열의 값들 비교를 통해서 앞에서 나왔던 값이 나온 경우에는 -1로 저장한다.
반복문을 돌면서 -1이 아닌 값(==처음 나온 값)이 나올 경우 result를 1씩 증가시킨다.
1546 평균
#include <stdio.h>
double findMax(double arr[], int n)
{
double result = arr[0];
for (int i = 1; i < n; i++) if (result < arr[i]) result = arr[i];
return result;
}
int main()
{
int n;
double grade[1001], sum = 0.0;
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%lf", &grade[i]);
double max = findMax(grade, n);
for (int i = 0; i < n; i++)
{
grade[i] = grade[i] / max * 100;
sum += grade[i];
}
printf("%.10lf", sum/n);
return 0;
}
grade 배열은 실수를 저장하도록 선언한다. 성적들을 입력받은 후 max 함수를 사용해서 최댓값을 찾아 반환한다. 최댓값을 이용해서 점수/최댓값*100을 각각의 점수에 적용해서 구한 값을 원래 점수를 저장하는 배열에 저장한다. 그리고 반복문을 돌면서 값을 계속 더해나간다.
절대오차 또는 상대오차가 10^(-2) 이하면 정답이므로 소수점 이하 자리를 넉넉하게 해서 결과를 출력한다.
8958 OX퀴즈
#include <stdio.h>
int main()
{
int n, result = 0, grade[100] = {0};
char input[100][81];
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%s", &input[i]);
for (int i = 0; i < n; i++)
{
for (int j = 0; input[i][j] != '\0'; j++)
{
if (input[i][j] == 'X') result = 0;
else
{
result++;
grade[i] += result;
}
}
result = 0;
}
for (int i = 0; i < n; i++) printf("%d\n", grade[i]);
return 0;
}
x가 나올 때마다 점수가 0이 되므로 조건문으로 입력된 값의 경우를 x인 경우와 0인 경우를 나눠서 식을 작성한다. 한 줄을 계산한 후에는 result를 반드시 0으로 초기화해야 한다.
4344 평균은 넘겠지
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n); // 테스트 케이스 개수
int* gradeNum = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
float count = 0, sum = 0;
scanf("%d", &gradeNum[i]);
int* grade = (int*)malloc(gradeNum[i] * sizeof(int));
for (int j = 0; j < gradeNum[i]; j++)
{
scanf("%d", &grade[j]);
sum += grade[j];
}
float ave = sum / gradeNum[i];
for (int j = 0; j < gradeNum[i]; j++) if (ave < grade[j]) count++;
printf("%.3f%%\n", count / gradeNum[i] * 100);
}
return 0;
}
성적을 입력받으면서 바로 sum을 더해나간다. 성적 입력이 끝나고 평균을 구한다. 다시 반복문을 돌면서 성적이 평균을 넘는 경우를 세고, 센 값을 성적의 입력개수로 나눈 후 100을 곱해 비율을 출력한다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C] 문자열 (0) | 2022.08.20 |
---|---|
[백준/C] 함수 (0) | 2022.08.20 |
[백준/C] 반복문 (0) | 2022.08.20 |
[백준/C] 조건문 (0) | 2022.08.20 |
[백준/C] 입출력과 사칙연산 (0) | 2022.08.20 |