본문 바로가기

프로그래머스

[C언어/프로그래머스 레벨 0]-직사각형 넓이 구하기

728x90


군대에서 코딩공부 하기

문제 설명


2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.

제한사항

dots의 길이 = 4
dots의 원소의 길이 = 2
-256 < dots[i] 의 원소 < 256잘못된 입력은 주어지지 않습니다.

입출력 예

dots                                                             result

[[1, 1], [2, 1], [2, 2], [1, 2]]                               1      ]
[[-1, -1], [1, 1], [1, -1], [-1, 1]]                         4      ]

입출력 예 설명

입출력 예 #1

좌표 [[1, 1], [2, 1], [2, 2], [1, 2]] 를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 1, 1이므로 직사각형의 넓이는 1 x 1 = 1입니다.

입출력 예 #2

좌표 [[-1, -1], [1, 1], [1, -1], [-1, 1]]를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 2, 2이므로 직사각형의 넓이는 2 x 2 = 4입니다.

[소스 코드]

#include <stdio.h>


int solution(int** dots, size_t dots_rows, size_t dots_cols) {
    int answer=0,a,b;
    //a는 가로의 길이 b는 세로의 길이
       for(int i=0;i<dots_rows;i++){
           for(int j=i;j<dots_rows;j++){
            
        if(dots[i][0]==dots[j][0]&&i!=j){
         b=(dots[i][1]-dots[j][1]);   
         
            if(b<0){
                b*=-1;    //길이는 항상 양수로
          }}
        if(dots[i][0]!=dots[j][0]){
         
            a=(dots[i][0]-dots[j][0]);   
         
            if(a<0){
              a*=-1;     //길이는 항상 양수로
          }}}}
       
       
    answer=a*b;
    
    return answer;
}


직사각형을 만드려면 일단
좌표 두개 ex)[x1,y1][x3,y3]->[1,1][2,2]가 찍혔다고 생각해보자. 그러면 무조건 남은 좌표는 [1,2][2,1]가
될수 밖에 없다. 즉 두개씩 x좌표 값이 같고 y값도 같다는 소리다. 반복문으로 돌려서 같은값일때 세로b를 구해주고
다른값일때 가로 a를 구해 곱하는 형식으로 풀었다.