반응형
#10807번 : 개수 세기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* p;
int n;
int i;
int result = 0;
int v;
p = (int*)malloc(100 * sizeof(int));
if (p == NULL)
{
printf("메모리 할당 오류\n");
exit(1);
}
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &p[i]);
}
scanf("%d", &v);
for (i = 0; i < n; i++)
{
if (p[i] == v)
result++;
}
printf("%d", result);
free(p);
return 0;
}
그냥 배열 선언해도 되긴하는데 동적메모리 연습할 겸해서 동적배열을 사용했다.
#10871번 : X보다 작은 수
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* A;
int n;
int X;
int i;
A = (int*)malloc(10000 * sizeof(int));
if (A == NULL)
{
printf("메모리 할당 오류");
exit(1);
}
scanf("%d %d", &n, &X);
for (i = 0; i < n; i++)
{
scanf("%d", &A[i]);
}
for (i = 0; i < n; i++)
{
if (A[i] < X)
printf("%d ", A[i]);
}
free(A);
return 0;
}
#10818번 : 최소. 최대
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* p;
int n;
int i;
p = (int*)malloc(1000000 * sizeof(int));
if (p == NULL)
{
printf("메모리 할당 오류");
exit(1);
}
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &p[i]);
int min = p[0];
int max = p[0]; //최댓값과 최솟값을 p[0]으로 가정함
for (i = 0; i < n; i++)
if (min > p[i])
min = p[i];
for (i = 0; i < n; i++)
if (max < p[i])
max = p[i];
printf("%d %d", min, max);
free(p);
return 0;
}
배열에 숫자를 받을 다음에 최댓값과 최솟값을 배열의 첫번째 값으로 가정한 뒤 for문을 사용하여 비교하며 최대최솟값을 찾았다.
#2562번 : 최댓값
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int p[9];
int i;
for (i = 0; i < 9; i++)
scanf("%d", &p[i]);
int max = p[0];
for (i = 0; i < 9; i++)
if (max < p[i])
max = p[i];
for (i = 0; i < 9; i++)
if (max == p[i])
break;
printf("%d\n%d", max, i + 1);
return 0;
}
배열은 0부터 시작하지만 출력할 때는 몇번째 인지 세기 위해서 +1을 하여 출력한다. 이문제는 처음부터 배열의 크기가 정해져 있었기 때문에 동적 배열을 사용하지 않았다.
#10810번 : 공 넣기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* basket;
basket = (int*)malloc(100 * sizeof(int));
if (basket == NULL)
{
printf("메모리 할당 오류");
exit(1);
}
int N, M;
int i, j, k;
int t;
int p;
scanf("%d %d", &N, &M);
for (t = 0; t < N; t++)
basket[t] = 0;
for (t = 0; t < M; t++)
{
scanf("%d %d %d", &i, &j, &k);
for (p = i-1; p <= j-1; p++)
basket[p] = k;
}
for (t = 0; t < N; t++)
printf("%d ", basket[t]);
free(basket);
return 0;
}
먼저 모든 바구니에 0을 대입하여서 초기설정을 문제와 동일하게 설정한 뒤, i, j, k값을 받아 문제를 해결한다. 앞선 문제와 동일하게 배열의 순서와 배열에 붙어있는 번호를 헷갈리지 않도록 유의한다.
#10813번 : 공 바꾸기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* basket;
basket = (int*)malloc(100 * sizeof(int));
if (basket == NULL)
{
printf("메모리 할당 오류");
exit(1);
}
int N, M;
int k;
int i,j;
int b; //공 바꾸기 위해서 만든 빈 바구니
scanf("%d %d", &N, &M);
for (k = 0; k < N; k++)
basket[k] = k + 1; //배열 초기화
for (k = 0; k < M; k++)
{
scanf("%d %d", &i, &j);
b = basket[i-1];
basket[i - 1] = basket[j - 1];
basket[j-1] = b;
}
for (k = 0; k < N; k++)
printf("%d ", basket[k]);
free(basket);
return 0;
}
두 배열을 바꾸기 위해서 빈 상자(b)를 사용했다.
#5597번 : 과제 안 내신 분..?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* student;
student = (int*)malloc(30 * sizeof(int));
if (student == NULL)
{
printf("메모리 할당 오류");
exit(1);
}
int check;
int i;
for (i = 0; i < 30; i++)
student[i] = 0; //일단 과제 안했다고 가정
for (i = 0; i < 28; i++)
{
scanf("%d", &check);
student[check - 1] = 1; //한 학생 값 변경
}
for (i = 0; i < 30; i++)
if (student[i] == 0)
printf("%d\n", i + 1);
free(student);
return 0;
}
먼저 모든 학생이 과제를 내지 않은 상태(0)라고 가정한다.
반복문을 사용해서 과제를 한 학생의 출석번호를 입력받고 그 학생의 배열의 값을 1(과제를 제출한 상태)로 변경한다.
다시 한 번 반복문을 사용해서 값이 0인 학생을 찾아 출석번호를 출력한다.
반응형
'코딩해요 > C' 카테고리의 다른 글
[백준/C언어] 1차원 배열 1546번 : 평균 (0) | 2023.08.08 |
---|---|
[백준/C언어] 입출력과 사칙연산 문제풀이 (0) | 2023.08.01 |
[백준/C언어] 1차원 배열 문제풀이(2) (0) | 2023.08.01 |
[백준/C언어] 반복문 문제풀이 (0) | 2023.07.16 |
[백준/C언어] 조건문 문제풀이 (0) | 2023.07.11 |