본문 바로가기
C/SWEA

[SWEA] #1959. 두 개의 숫자열

by 단월໒꒱ 2021. 11. 28.

Difficulty 2

 

[문제]

 

 

 

[코드 및 결과]

 

 

 

#include <stdio.h>

int main(int argc, char** argv) {
    int T, N, M, sum;
    int n[20], m[20];
    
    scanf("%d", &T);
    
    for (int t = 1; t <= T; t++) {
        scanf("%d %d", &N, &M);
        
        for (int i = 0; i < N; i++)
            scanf("%d", &n[i]);
        for (int i = 0; i < M; i++)
            scanf("%d", &m[i]);
        
        int max = 0;
        
        if (N > M) {
            for (int i = 0; i < N-M+1; i++) {
                sum = 0;
                for (int j = 0; j < M; j++) {
                    sum += n[i+j] * m[j];
                }
                max = (sum > max) ? sum : max;
            }
        }
        
        else {
            for (int i = 0; i < M-N+1; i++) {
                sum = 0;
                for (int j = 0; j < N; j++) {
                    sum += n[j] * m[i+j];
                }
                max = (sum > max) ? sum : max;
            }
        }
        
        printf("#%d %d\n", t, max);
    }
    
    return 0;
}

 

 

 

 

[설명]

테스트케이스 T, 첫번째 배열 n과 그의 크기 N, 두번째 배열 m과 그의 크기 M, 값을 더해서 만들 합 sum을 int형으로 선언하는데 N과 M의 값이 3~20이라고 했으므로 각각의 배열의 크기를 20으로 잡아준다.

scanf 함수로 T, N, M을 입력받고 입력받은 배열의 크기만큼 수를 입력받아 각각의 배열에 저장한다.

최댓값은 0으로 초기화한다.

조건문을 통해 N과 M의 크기를 비교하여 N이 더 클 경우 첫번째 반복문은 M과 N의 차이만큼 반복하도록 하여 두번째 반복문으로 n[i+j] * m[j]의 값을 sum에 각각 저장한 뒤 저장된 max 값과 비교하여 더 큰 값을 max에 저장해준다.

M이 더 클 경우에도 마찬가지의 방법으로 max 값을 구해준다.

 

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 

'C > SWEA' 카테고리의 다른 글

[SWEA] #2005. 파스칼의 삼각형  (0) 2021.11.28
[SWEA] #1946. 간단한 압축 풀기  (0) 2021.11.19
[SWEA] #1926. 간단한 369게임  (0) 2021.11.19
[SWEA] #1984. 중간 평균값 구하기  (0) 2021.11.14
[SWEA] #2056. 연월일 달력  (0) 2021.11.14

댓글