본문 바로가기

Algorithm

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

반응형

출처

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

 

SW Expert Academy

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

swexpertacademy.com

 

아이디어)

좌우로 2개의 빌딩에 의해 가려지면 안되므로 자신 기준 -2 ,-1 , +1, +2에 대해 조사를 한다.

시간을 줄여야 하기때문에 OR로 묶는 것보다 -2위치의 빌딩이 자신보다 크다면 바로 return 시켜버리는 식의 조사를 진행.

만약 4개의 빌딩이 전부 자신보다 작다면 자신과 그 빌딩의 높이차의 최소를 구해서 result에 더 해주면 끝

 

약간의 실수)

입력을 제대로 안보고 인덱스 범위를 2부터 N-2까지 입력받았는데 0 0을 전부 입력에서 받아주고 있었다. 

 

코드)

#include<iostream>


using namespace std;
int arr[1000];


int findmin(int inx)
{
	int fmin = 0;
	if(arr[inx]-arr[inx-2] < 0)
	{
		return 0;
	}
	else{
		
		fmin = arr[inx] - arr[inx-2];
		
		if(arr[inx]-arr[inx-1]<0)
		{
			
			return 0;
		}
		else{
			
			if(fmin > arr[inx]-arr[inx-1])
			{
				fmin = arr[inx]-arr[inx-1];
			}
			
			if(arr[inx]-arr[inx+1]<0)
			{
				return 0;
			}
			else
			{
				if(fmin > arr[inx] - arr[inx+1])
				{
					fmin = arr[inx] - arr[inx+1];
				}
				
				if(arr[inx]-arr[inx+2] < 0)
				{
					return 0;
				}
				else
				{
					if(fmin > arr[inx] - arr[inx+2])
					{
						fmin = arr[inx] - arr[inx+2];
					}
				}
				
			}
		}
	}
	
	return fmin;
}



int main(void)
{
	
	
	int N;
	
	
	
	for(int i =1 ; i<=10; i++)
	{
		
		int result = 0;
		cin >> N;
		
		for(int j = 0; j <1000; j++)
		{
			arr[j] = 0;
		}
		
		for(int j = 0; j < N; j++)
		{
			cin >> arr[j];
		}
		
		arr[0] = 0;
		arr[1] = 0;
		arr[N-1] = 0;
		arr[N-2] = 0;
		
	
		
		for(int j = 2; j < N-2; j++)
		{
			int fmin = 0;
			fmin = findmin(j);
			
			result += fmin;
			
		}
		
		
		cout <<"#"<<i<<" "<<result<<endl;
		
		
		
	}
}
반응형