본문 바로가기
알고리즘/SWEA

[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View

by hyerann 2019. 4. 27.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV134DPqAA8CFAYh&categoryId=AV134DPqAA8CFAYh&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

index를 통해서 왼쪽 두 높이와 오른쪽 두 높이를 검사한다.

왼쪽 두 높이 중 더 큰 값과 현재 index의 값의 차이와 오른쪽 두 높이 중 더 큰 값과 현재 index의 값의 차이를 구한다.

만일 현재 index의 값이 더 작으면 조망이 확보될 수 없으므로 -1을 넣어 따로 구분한다.

둘 다 -1이 아닐 경우, 둘 중 더 작은 값이 조망이 확보된 높이이다.

#include <iostream>
#include <ios>
using namespace std;

int width, heights[1000];
int getResult();

int main() {
	cin.tie(0); ios::sync_with_stdio(0);
	for (int tc = 1; tc <= 10; tc++) {
		cin >> width;
		for (int i = 0; i < width; i++) cin >> heights[i];
		cout << '#' << tc << ' ' << getResult() << "\n";
	}
	return 0;
}

int getResult() {
	int result = 0;
	for (int i = 2; i < width - 2; i++) {
		// 왼쪽 확인
		int left = heights[i - 2] > heights[i - 1] ? heights[i - 2] : heights[i - 1];
		int leftView = heights[i] - left > 0 ? heights[i] - left : -1;
		// 오른쪽 확인
		int right = heights[i + 2] > heights[i + 1] ? heights[i + 2] : heights[i + 1];
		int rightView = heights[i] - right > 0 ? heights[i] - right : -1;

		if (leftView != -1 && rightView != -1) result += leftView < rightView ? leftView : rightView;
	}
	return result;
}

댓글