Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- PHP 웹페이지 만들기
- 웹페이지 만들기
- CSS
- 파이썬
- 생활코딩
- 머신러닝
- The Loard of BOF
- Python
- Javascript
- c
- 자료구조 복습
- C언어
- WarGame
- 숙명여자대학교 정보보안 동아리
- Sookmyung Information Security Study
- XSS Game
- 풀이
- c++
- BOJ Python
- hackerrank
- HTML
- hackctf
- siss
- 기계학습
- 백준
- lob
- 숙명여자대학교 정보보안동아리
- BOJ
- 드림핵
- SWEA
Archives
- Today
- Total
혜랑's STORY
[2020-2학기 C과제 4주차] 본문
# 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 8931 : 제로
- 풀이
이 문제를 쉽게 해결하기 위하여 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);
}
}
- 실행결과
'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 |