개발자 톡

연습문제 톡 진정한 효도

c 코드 공유합니다. 효율적으로 짜진 않았고 그냥 나열식으로 짰어요

등록일
2024-04-28 23:22:51
조회수
291
작성자
gkgkgk464

#include <stdio.h>

#include <math.h>


int value = 0;

int values[3][3] = {0,};

int main(void)

{

  for(int i = 0; i < 3; i ++){

    for(int j = 0; j < 3; j ++){

      scanf("%d",&value);

      values[i][j] = value;

    }

  }

  int old_diff = 10;

  int new_diff = 0;

  // 가로 

  for(int i = 0; i < 3; i ++){

     new_diff = abs(values[i][0] - values[i][1]);

     new_diff = new_diff + abs(values[i][0] - values[i][2]);   

     if (new_diff < old_diff){

       old_diff = new_diff;

     }

     new_diff = abs(values[i][1] - values[i][0]);

     new_diff = new_diff + abs(values[i][1] - values[i][2]);   

     if (new_diff < old_diff){

       old_diff = new_diff;

     }

     new_diff = abs(values[i][2] - values[i][0]);

     new_diff = new_diff + abs(values[i][2] - values[i][1]);   

     if (new_diff < old_diff){

       old_diff = new_diff;

     } 

  }

  // 세로 

  for(int i = 0; i < 3; i ++){

     new_diff = abs(values[0][i] - values[1][i]);

     new_diff = new_diff + abs(values[0][i] - values[2][i]);   

     if (new_diff < old_diff){

       old_diff = new_diff;

     }

     new_diff = abs(values[1][i] - values[0][i]);

     new_diff = new_diff + abs(values[1][i] - values[2][i]);   

     if (new_diff < old_diff){

       old_diff = new_diff;

     }

     new_diff = abs(values[2][i] - values[0][i]);

     new_diff = new_diff + abs(values[2][i] - values[1][i]);   

     if (new_diff < old_diff){

       old_diff = new_diff;

     } 

  } 

  printf("%d",old_diff);   

  return 0;

}


어차피 최대 높이는 3으로 지정되어있기 때문에 가정 하에 짰습니다.

예를 들어

1 2 3

1 1 1

1 3 3

위와 같이 배열되어 있을 때,

1 행을 보면 1 2 3 으로 되어 있습니다.

이 경우 1 을 2로 바꾸고 3도 2로 바꾸어 2 2 2 로 맞추고 총 두 번의 수정이 가장 짧은 루트인데

이를 구하는 방법을 각 원소의 차이의 절댓값의 합으로 구했습니다.


(0,0)을 기준으로 잡음

1 - 2 = |-1| = 1

1 - 3 = |-2| = 2

절댓값의 합 = 3


(0,1)을 기준으로 잡음

2 - 1 = 1

2 - 3 = |-1| = 1

절댓값의 합 = 2


(0,2)를 기준으로 잡음

3 - 1 = 2

3 - 2 = 1

절댓값의 합 = 3


따라서 가장 작은 합은 2


이런 식으로 3 by 3 을 모두 순회해서 가장 작은 합을 구했습니다.


#진정한_효도

이 카테고리의 톡 더보기