코딩해요/C

[백준/C언어] 1차원 배열 문제풀이

yenas0 2023. 7. 24. 23:40
반응형

 

 

 

#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인 학생을 찾아 출석번호를 출력한다.

 

 

 

반응형