N

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

SW Expert Academy

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

naeunchan 2020. 10. 6. 16:55
728x90
반응형

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

 

SW Expert Academy

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

swexpertacademy.com

 

우선 10개의 테스트 케이스가 주어지기 때문에 for문을 10번 반복한다.(test case 개수 입력을 받지 않으니 주의!)

int형 변수로 건물 개수를 나타내는 t,

왼쪽의 빌딩 높이를 나타내는 left,

오른쪽의 빌딩 높이를 나타내는 right,

전망 좋은 집의 개수를 더하는 count를 선언한다.

전역변수로는 int형 배열 arr[1000]을 선언하였다.

 

이제 2 ~ t - 2 인덱스까지 순회하도록 한다.

left는 (현재 빌딩의 인덱스 - 2) 와 (현재 빌딩의 인덱스 - 1)의 대소를 비교하여 더 높은 빌딩의 높이를 구한다.

right도 (현재 빌딩의 인덱스 + 2) 와 (현재 빌딩의 인덱스 + 1)의 대소를 비교하여 더 높은 빌딩의 높이를 구한다.

 

만약 left, right가 모두 현재 빌딩보다 낮으면

count에 값을 더해주도록 한다.

더해주는 값은 (현재 빌딩의 높이) - (left와 right 중 더 높은 빌딩)이다.

삼항 연산자를 이용하여 간단하게 코드를 구현하였다.

#include <iostream>

using namespace std;

int arr[1000] = {0, };

int main(void)
{   
    for(int i = 1; i <= 10; i++)
    {
        int t, left = 0, right = 0, count = 0;
        cin >> t;
        
        for(int j = 0; j < t; j++)
        	cin >> arr[j];
		
        for(int j = 2; j < t - 2; j++)
        {
            left = arr[j - 2] > arr[j - 1] ? arr[j - 2] : arr[j - 1];
            right = arr[j + 2] > arr[j + 1] ? arr[j + 2] : arr[j + 1];
            
            if(arr[j] > left && arr[j] > right)
                count += arr[j] - (left > right ? left : right);
        }
        cout << "#" << i << " " << count << endl;
    }
    
    return 0;
}
728x90
반응형