반응형
출처
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
아이디어)
좌우로 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;
}
}
반응형
'Algorithm' 카테고리의 다른 글
1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) | 2019.12.15 |
---|---|
1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2019.12.14 |
백준 5525번 IOIOI (0) | 2019.11.18 |
삼성SW 1859. 백만 장자 프로젝트 (0) | 2019.11.17 |
백준 2841번 외계인의 기타연주 (0) | 2019.11.14 |