Algorithm/SWEA

[SWEA] - 1206. [S/W 문제해결 기본] 1일차 - View

benguin 2019. 6. 11. 15:46

[URL]

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV134DPqAA8CFAYh&categoryId=AV134DPqAA8CFAYh&categoryType=CODE

 

SW Expert Academy

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

www.swexpertacademy.com

[풀이 과정]

*시뮬레이션

 

1. 각 테스트케이스에서 0 부터 len까지 가능한 범위에 있는지 확인

2. 범위에 있다면 index기준 좌2개 우2개 총 4개를 tempArr에 저장

3. tempArr 4개 오름차순으로 정렬 후 , max값 arr[index] 비교

4. arr[index] > max 인 경우 그 차이만큼 답에 더 해준다.

 

[소스 코드]

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX 1005
 
int len, dap;
int arr[MAX];
 
void init()
{
    len = 0;
    dap = 0;
    for (int i = 0; i < MAX; i++)
    {
        arr[i] = 0;
    }
 
    scanf("%d"&len);
 
    for (int i = 0; i < len; i++)
    {
        scanf("%d"&arr[i]);
    }
}
 
void calc(int index)
{
    if (index >= 2 && index <= len - 2)
    {
        //찾자 index-2, index-1, index+1, index+2 4개 중에서 제일 큰놈과 비교
        int tempArr[4];
        tempArr[0= arr[index - 2];
        tempArr[1= arr[index - 1];
        tempArr[2= arr[index + 1];
        tempArr[3= arr[index + 2];
 
         sort(tempArr, tempArr+4);        // 오름차순 정렬 max: tempArr[3]    
 
        if (arr[index] > tempArr[3])
        {
            dap += arr[index] - tempArr[3];
            return;
        }    
 
        return;
    }
    else
        return;
}
 
int main() {
    int T = 10;
    for (int tc = 0; tc < T; tc++)
    {
        init();        //초기화 각 테스트 케이스 별 가로길이 입력, 배열 입력,
 
        for (int i = 0; i < len; i++)
        {
            calc(i);
        }
 
        printf("#%d %d\n", tc + 1, dap);
    }
 
 
    return 0;
}
cs