혜랑's STORY

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

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

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

hyerang0125 2020. 10. 2. 22:05

# SWEA 8338 : 계산기

SWEA 8338번 문제

- 풀이

 수를 입력받고 이전 값에 더한 값과 곱한 값 중 더 큰 값을 실행해주면 된다. (우선 순위를 고려하지 않고 왼쪽에서 오른쪽으로 차례대로 계산하기 떄문에 가능하다.)

- 코드

#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 num, max = 0;

		for (int i = 0; i < N; i++) {
			scanf("%d", &num);

			if (max + num > max * num)
				max += num;
			else
				max *= num;
		}

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

- 실행결과

SWEA 8338번 실행결과

 

# SWEA 8931 : 제로

 

SWEA 8931번 문제

- 풀이

이 문제를 쉽게 해결하기 위하여 STACK(스택) 개념을 이용하였다. 

*STACK이란?

STACK의 도식화

컴퓨터에서 사용되는 기본 데이터 구조 중 하나로 데이터를 후입선출(LIFO : Last In, First Out, FILO : First In, Last Out) 구조로 유지하는 추상 데이터형(abstract data type)을 말한다.  (위 스택의 구조로 살펴보면 pop하여 출력하는 것이 아니라 sum에 더해준다고 생각하면 아래 설명을 이해하기 편할 것 같다.)

 먼저 배열에 모든 값을 입력한 뒤, 뒤에서부터 값을 꺼내어 더하거나, 그냥 지나가거나 top을 더해주는 경우를 선택하여 실행한다. 첫 번째로 값을 sum에 더하는 경우이다. 이는 top(0이 나온 횟수 : 지워야하는 횟수)가 0이며, stack[index]의 값이 0이 아니라는 것을 뜻한다. 즉, 더해야하는 올바를 값인 것이다. 두 번째로 top과 stack[index] 모두 0이 아닌 경우이다. 이는 stack[index]의 값이 불필요한 값이기 때문에 값을 더하지 않고 지나간다는 의미로 top을 1 감소시킨다. 세 번째로 stack[index]의 값이 0인 경우이다. 이는 값을 지우라는 신호로 top을 1 증가시켜준다.

- 코드

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

int main() {
	 int TC, k;
	scanf("%d", &TC);

	for (int tc = 1; tc <= TC; tc++) {
		int sum = 0, top = 0;

		scanf("%d", &k);
		int* stack = (int*)malloc(sizeof(int) * k);
		for (int i = 0; i < k; i++)
			scanf("%d", &stack[i]);

		for (int index = k - 1; index >= 0; index--) {
			if (top == 0 && stack[index] != 0)
				sum += stack[index];

			if (top != 0 && stack[index] != 0)
				top--;

			if (stack[index] == 0)
				top++;

		}

		printf("#%d %d\n", tc, sum);
	}
}

- 실행결과

SWEA 8931번 실행결과

 

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

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