혜랑's STORY

[2020-2학기 C과제 2주차] 본문

2020 SISS 21기 활동/2학기 C언어

[2020-2학기 C과제 2주차]

hyerang0125 2020. 9. 15. 15:54

#SWEA 10505번 : 소득불균형

SWEA 10505번 문제

- 풀이

 N명의 사람의 소득을 입력받을 때, mean이라는 평균을 구하는 변수에 각 소득을 누적하여 저장한 뒤, 입력을 끝내면 mean/N을 통하여 평균 소득을 구한다. 그 뒤, 우리가 알고싶은 평균 이하의 소득을 가진 사람들을 알아보기 위하여 0으로 초기화된 cnt라는 변수에 p[i](i번째 사람의 소득)이 mean보다 작거나 같다면 1씩 더한다. 즉, cnt의 값이 평균 이하의 소득은 가진 사람들의 수가 되는 것이다. 

- 코드

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

int main() {
	int T, N;
	scanf("%d", &T);

	for (int tc = 1; tc <= T; tc++) {
		scanf("%d", &N);

		int* p = (int*)malloc(sizeof(int) * N);
		int mean = 0;

		for (int i = 0; i < N; i++) {
			scanf("%d", &p[i]);
			mean += p[i];
		}

		mean = mean / N;
		int cnt = 0;

		for (int i = 0; i < N; i++) {
			if (mean >= p[i])
				cnt++;
		}

		printf("#%d %d", tc, cnt);
	}

	return 0;
}

 

- 실행결과

SWEA 10505번 실행결과

#SWEA 10200번 : 구독자 전쟁

- 풀이

 이 문제는 A와 B라는 집합의 교집합의 최대와 최소를 구하는 문제로 N명의 사람 중 P를 구독한 사람의 수와 T를 구독한 사람의 수의 합이 전체 인원(N)보다 작다면, P와 T 채널을 모두 구독한 사람의 최소 인원은 0명이고 최대 인원수는 P와 T의 구독자 중 더 적은 명수를 가진 채널이 될 것이다. 그러나 P와 T를 구독한 사람의 수의 합이 전체인원(N)보다 크다면, 최소 인원수는 두 채널의 구독자 수의 합에서 전체인원(N)을 뺀 값이 되고, 최대 인원은 앞서 말했듯 P와 T의 구독자 중 더 적은 명수를 가진 채널이 될 것이다.

-코드

#include <stdio.h>

int main() {
	int TC, all, p, t;
	scanf("%d", &TC);

	for (int tc = 1; tc <= TC; tc++) {
		scanf("%d %d %d", &all, &p, &t);

		if (all > p + t) {
			if (p >= t)
				printf("#%d %d 0\n", tc, t);
			else
				printf("#%d %d 0\n", tc, p);
		}
		else {
			if (p >= t)
				printf("#%d %d %d\n", tc, t, (p + t) - all);
			else
				printf("#%d %d %d\n", tc, p, (p + t) - all);
		}
	}

	return 0;
}

-실행결과

SWEA 10200번 실행결과

 

'2020 SISS 21기 활동 > 2학기 C언어' 카테고리의 다른 글

[2020-2학기 C과제 6주차]  (0) 2020.11.07
[2020-2학기 C과제 4주차]  (0) 2020.10.02
[2020-2학기 C과제 3주차]  (0) 2020.09.21
[2020-2학기 C과제 추가]  (0) 2020.09.15
[2020-2학기 C과제 1주차]  (0) 2020.09.04