티스토리 뷰

반응형


#. Problem

* The copyright in this matter is in Inflearn


#. Resolution Process

  1. Read and understand problem

  2. Redefine the problem + abstract

  3. Create solution plan (select Algorithm, Data structure)

  4. Prove the plan (check performance time and usage memory)

  5. Carry out the plan

  6. Look back on the plan and find a way to improve it


#. Solve

  1. 입력이 9 x 9 로 고정되어 있으므로, 간단하게 생각해도 될 것 같다.

     각 행의 평균을 구해야하므로 입력하면서 


     각 행의 평균을 배열에 저장해두고 각 행의 평균과 가까운 값을 고르면 되겠다

     가까운의 기준은 평균에서 각 행의 값들을 뺀 후 절대값 모자를 씌워준 결과가 작을 수록 가까운 것이다.

     만일 최소 거리가 같을 경우 더 큰 값을 출력하면 된다.


     바로 코딩으로 옮겨보숑~!


#. Code

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
#include <cstdio>
#include <vector>
#include <algorithm>
 
using namespace std;
 
const int N = 9;
int grid[N][N];
int avg[N];
 
int main(void)
{
    freopen("input.txt""rt", stdin);
 
    int i, j, rst, diff, total, min;
 
    for (i = 0; i < N; i++)
    {
        total = 0;
 
        for (j = 0; j < N; j++)
        {
            scanf("%d"&grid[i][j]);
 
            total += grid[i][j];
        }
 
        avg[i] = float(total) / N + .5;
    }
 
    for (i = 0; i < N; i++)
    {
        rst = -21470000;
        min = 21470000;
 
        for (j = 0; j < N; j++)
        {
            diff = abs(avg[i] - grid[i][j]);
 
            if (diff < min)
            {
                rst = grid[i][j];
                min = diff;
            }
            else if (diff == min)
                rst = rst > grid[i][j] ? rst : grid[i][j];
        }
 
        printf("%d %d\n", avg[i], rst);
    }
 
    return 0;
}
cs


#. Other code

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
#include<stdio.h>
#include<vector>
#include<algorithm>
 
using namespace std;
 
int a[10][10];
 
int main(){
    int i, j, sum, ave, min, res, tmp;
 
    for(i=1; i<=9; i++){
        sum=0;
 
        for(j=1; j<=9; j++){
            scanf("%d"&a[i][j]);
 
            sum=sum+a[i][j];
        }
 
        ave=(sum/9.0)+0.5;
 
        printf("%d ", ave);
 
        min=2147000000;
 
        for(j=1; j<=9; j++){
            tmp=abs(a[i][j]-ave);
 
            if(tmp<min){
                min=tmp;
                res=a[i][j];
            }
            else if(tmp==min){
                if(a[i][j]>res) res=a[i][j];
            }
        }
 
        printf("%d\n", res);
    }
 
    return 0;
}
cs

평균을 저장하는 배열을 사용하지 않고 입력과 동시에 처리를 해주셨다.

크게 영향이 있는 것은 아니지만 시간복잡도 측면에서만 봐도 2배가 차이날 것이다.


결국 나는 두 번 2차원 배열을 돌렸기 때문에..

이런 부분들도 지금부터 더 신중하게 생각해보도 구현해야겠다.


#. Result

  - Input --------------------------------------------------------

3 23 85 34 17 74 25 52 65

10 7 39 42 88 52 14 72 63

87 42 18 78 53 45 18 84 53

34 28 64 85 12 16 75 36 55

21 77 45 35 28 75 90 76 1

25 87 65 15 28 11 37 28 74

65 27 75 41 7 89 78 64 39

47 47 70 45 23 65 3 41 44

87 13 82 38 50 12 48 29 80

------------------------------------------------------------------


  - Output --------------------------------------------------------

42 34

43 42

53 53

45 36

50 45

41 37

54 64

43 44

49 50

------------------------------------------------------------------



반응형

'PS > Problem_Solving' 카테고리의 다른 글

[Inflearn] K진수 출력  (0) 2020.04.29
[Inflearn] 블록의 최댓값  (0) 2020.04.28
[Inflearn] 봉우리  (0) 2020.04.28
[Inflearn] 멀티태스킹  (0) 2020.04.28
[Inflearn] 마구간 정하기(binary search apply)  (0) 2020.04.27
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday