어흥
[해커랭크] 3D Surface Area (C++) 본문
728x90
반응형
문제 링크: www.hackerrank.com/challenges/3d-surface-area/problem
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
반응형
'알고리즘 > HackerRank' 카테고리의 다른 글
[해커랭크] Reverse a doubly linked list (C++) (0) | 2021.01.08 |
---|---|
[해커랭크] Snakes and Ladders: The Quickest Way Up (C++) (0) | 2021.01.05 |
[해커랭크] Floyd : City of Blinding Lights (C++) (0) | 2020.12.08 |
[해커랭크] Prim's (MST) : Special Subtree (C++) (0) | 2020.12.04 |
[해커랭크] Dijkstra: Shortest Reach 2 (C++) (0) | 2020.12.03 |
Comments