혜랑's STORY

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

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

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

hyerang0125 2020. 11. 7. 16:23

# SWEA 8104 : 조 만들기

SWEA 8104번 문제

- 풀이

 이 문제의 핵심은 한 조당 1~N줄의 학생이 있다고 생각하고, 홀수 행일 때 순차적으로 숫자를 더해주고, 짝수일 때 역순으로 숫자를 더하는 것이다.

- 코드

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

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

	for (int tc = 1; tc <= T; tc++) {
		scanf("%d %d", &N, &K);
		int* arr = (int*)malloc(sizeof(int) * K);
		for (int i = 0; i < K; i++)
			arr[i] = 0;

		int num = 1;

		for (int i = 1; i <= N; i++) {

			if (i % 2 == 1) {
				for (int j = 0; j < K; j++) {
					arr[j] += num;
					num++;
				}
			}

			else {
				for (int j = K-1; j >= 0; j--) {
					arr[j] += num;
					num++;
				}
			}

		}

		printf("#%d ", tc);
		for (int i = 0; i < K; i++)
			printf("%d ", arr[i]);
		printf("\n");
	}
	return 0;
}

 

- 실행 결과

SWEA 8104번 실행결과

 

# SWEA 8500 : 극장 좌석

SWEA 8500번 문제

- 풀이

 입력받은 좌석 수가 정렬되어 있다고 가정해보면 (극장의 최소 좌석 개수) = (사람 수) + (입력받은 좌석 수 = 비어있는 좌석 수) + (입력받은 좌석 수 중 가장 큰 값) 이다. 

 사람들의 양 옆이 비어야한다고 하였으므로 만약 N명의 사람이 있다면 우리가 구해야하는 빈 좌석의 위치는 총 N+1 곳이 된다. 따라서 양쪽 좌석이 가장 많이 비어야하는 곳 즉, 가장 큰 수를 한 번 더 더해주고 나머지는 정렬을 통하여 그 수가 포함되도록 만들어 줄 수 있는 것이다.

- 코드

#include <stdio.h>

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

	for (int tc = 1; tc <= T; tc++) {
		int max = 0;
		int sum = 0;

		scanf("%d", &N);
		for (int i = 0; i < N; i++) {
			scanf("%d", &num);
			if (num > max)
				max = num;
			sum += num;
		}

		printf("#%d %d\n", tc, sum + N + max);
	}
	return 0;
}

 

- 실행결과

SWEA 8500번 실행결과

 

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

[2020-2학기 C언어 8주차]  (0) 2020.11.18
[2020-2학기 C언어 7주차]  (0) 2020.11.09
[2020-2학기 C과제 4주차]  (0) 2020.10.02
[2020-2학기 C과제 3주차]  (0) 2020.09.21
[2020-2학기 C과제 추가]  (0) 2020.09.15