티스토리 뷰

인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.

문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅

 

 

입력예제 1

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 59 12 48 29 80

 

출력예제 1 

42 34

43 42

53 53

45 36

50 45

41 37

54 64

43 44

49 50

 

풀이 

2차원 배열 탐색 문제

평균을 구하고, 한 행에서 그 행의 평균과 가장 거리가 가까운 값을 찾는다.

 

- 주의해야 할 점

(1) 9x9행렬에서 배열크기를 [9][9]로 잡으면 안되고 [10][10]으로 잡아야 함

(2) 정수/실수 => 실수, 문제의 예시에서 평균값에서 반올림 된 값을 사용하고 있으므로 (한 행의 총 합계/9.0) + 0.5로 올림 필요

 

- 생각해야 할 점

(1) 평균값과 한 행의 숫자들과의 거리를 파악하는 방법

=> 해당값과 평균값의 차이가 작으면 된다. 하지만 음수가 나올수도 있기 때문에 절댓값이 필요함

=> algorithm 헤더에서 제공하는 abs함수 사용 ex] abs(a[i][j]-avg)<min

(2) tmp값을 구하는게 아닌 가장 거리가 작은 위치의 값을 출력하기 때문에 res 변수에 a[i][j] 값을 넣어줌

(3) 거리가 같은게 나왔을 때는 큰 값을 출력

=> if(tmp==min)

=> min값: 지금까지 가장 작은 거리값, res값: 그 거리를 가진 배열 값, tmp값: a[i][j]를 통해 새로 구해진 가장 작은 거리값

=> 현재 a[i][j]값과 res값을 비교해 현재a[i][j]가 res보다 큰 값일 시 교체해준다. if(a[i][j]>res) res=a[i][j]

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int a[10][10];


// 48. 각 행의 평균과 가장 가까운 값
int main() {
    int i, j, sum, avg, min, tmp, res;
    for(i=1;i<=9;i++){
        sum=0;
        for(j=1;j<=9;j++){
            scanf("%d", &a[i][j]);
            sum+=a[i][j];
        
        avg = (sum/9.0)+0.5; //9로 나누면 소숫점이 생기지 않음 (실수/정수 => 실수), +0.5해서 반올림
        printf("%d ", avg);
        min=2147000000;
        for(j=1;j<=9;j++){
            tmp=abs(a[i][j]-avg);
            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;
}
 

 

'알고리즘' 카테고리의 다른 글

50. 영지(DP)  (0) 2020.12.29
49. 블록의 최댓값  (0) 2020.12.28
47. 봉우리  (0) 2020.12.23
46. 멀티태스킹(카카오 먹방 문제 변형)  (0) 2020.12.22
45. 공주구하기  (0) 2020.12.21
최근에 올라온 글
Total
Today
Yesterday