2020 SISS 21기 활동/여름방학 C언어
[여름방학 5주차 C과제]
hyerang0125
2020. 8. 7. 00:34
# 1948번 : 날짜 구하기
- 풀이
각 달의 마지막 날짜들을 담은 배열 date를 만들어 둔다. (달과 달 사이의 날짜들을 구하기 위함.) 그 뒤 날짜의 차이를 먼저 구하고, for문을 이용하여 달과 달 사이의 날짜를 구한다.
- 코드
#include <stdio.h>
int main() {
int date[12] = { 31, 28, 31, 20, 31, 30, 31, 31, 30, 31, 30, 31 };
int T;
scanf_s("%d", &T);
for (int i = 1; i <= T; i++) {
int m1, d1, m2, d2;
scanf_s("%d %d %d %d", &m1, &d1, &m2, &d2);
int day = d2 - d1 + 1;
for (int i = m1; i < m2; i++)
day += date[i-1];
printf("#%d %d\n", i, day);
}
return 0;
}
- 실행결과
#1959 : 두 개의 수
- 풀이
x와 y의 크기를 비교하는 이유는 칸을 미뤄서 생각하기 위함이다. 즉, 짧은 배열의 k번째와 긴 배열의 k+j의 배열을 곱하는 경우를 만들어 주기 위하여 이중 for문을 사용하였고, 그 중 바깥 for문의 탈출조건을 x - y +1 또는 y - x + 1로 두 배열의 길이의 차만큼 실행 할 수 있도록 한다.
- 코드
#include <stdio.h>
#include <stdlib.h>
int main() {
int T;
scanf_s("%d", &T);
for (int i = 1; i <= T; i++) {
int x, y;
scanf_s("%d %d", &x, &y);
int* A = (int*)malloc(sizeof(int) * x);
int* B = (int*)malloc(sizeof(int) * y);
for (int j = 0; j < x; j++) scanf_s("%d", &A[j]);
for (int j = 0; j < y; j++) scanf_s("%d", &B[j]);
int max = -9999999;
if (y > x) {
for (int j = 0; j < y - x + 1; j++) {
int sum = 0;
for (int k = 0; k < x; k++) sum += A[k] * B[k + j];
if (sum > max) max = sum;
}
}
else {
for (int j = 0; j < x - y + 1; j++) {
int sum = 0;
for (int k = 0; k < y; k++) sum += A[k+j] * B[k];
if (sum > max) max = sum;
}
}
printf("#%d %d\n", i, max);
}
return 0;
}
- 실행결과