어흥

[해커랭크] 3D Surface Area (C++) 본문

알고리즘/HackerRank

[해커랭크] 3D Surface Area (C++)

라이언납시오 2020. 12. 30. 20:00
728x90
반응형

문제 링크: www.hackerrank.com/challenges/3d-surface-area/problem

 

3D Surface Area | HackerRank

Find the surface area of a 3D Toy

www.hackerrank.com

1. 주의할 점

- 모형의 표면적을 구하는 문제로, 윗면과 밑면은 항상 가로*세로라는것을 알 수 있다

- 옆면의 경우, 옆면에서 바라봤을 때로 가정하면 4 3 4 과 같은 도형을 8로 인식한다(정답은 10으로, 4와 3사이에 옆면이 양옆으로 1개씩 추가로 존재)

 

2. 구현

- 윗면과 밑면은 항상 가로*세로이므로 Result = 2*Row*Col로 초기화를 하고 시작한다

- 옆면의 경우, 1열 혹은 행씩 확인하도록 한다

- 해당 줄(열 or 행)의 양끝에 있는 높이만큼 우선 Result에 더한다

- 0~Col-1 혹은 0~Row-1까지 검사하며 뒤에 위치한 블록과의 차이를 Result에 더한다(4번의 작업을 2번으로 줄이기 위해)

- 위의 과정을 모든 줄에 적용시킨다

 

//표면적을 구하는 주요 코드
int surfaceArea(vector<vector<int>> A) {
    int row = A.size();
    int col = A[0].size();
    int result = 2*row*col;
    for(int i=0;i<row;i++){
        result+=A[i][0]+A[i][col-1];
        for(int j=0;j<col-1;j++)
            result+=abs(A[i][j]-A[i][j+1]);
    }
    for(int j=0;j<col;j++){
        result+=A[0][j]+A[row-1][j];
        for(int i=0;i<row-1;i++)
            result+=abs(A[i][j]-A[i+1][j]);
    }
    return result;
}

 

728x90
반응형
Comments