풀이
현재 탭의 개수에서 올바른 탭의 개수만큼 빼서 계산할 탭의 수만 남겨준 후, 부호가 같은 그룹을 start, end로 index 범위로 지정해주고, 그룹에서 뺄 수 있는 탭의 최솟값만큼 한 번에 빼는 방식으로 풀이했다.
소스코드
#include <stdio.h>
#include <math.h>
int main(){
int N;
scanf("%d", &N);
int dp[N], val, line = N;
for (int i = 0; i < N; i++)
scanf("%d", &dp[i]);
for (int i = 0; i < N; i++){
scanf("%d", &val);
dp[i] -= val;
!dp[i] && --line;
}
int cnt = 0;
while (line){
int start = 0, end, min = 80, op = 0;
for (int i = 0; i < N; i++){
if (!op && !dp[i]) continue;
if (!op){
start = i;
op = (dp[i] > 0 ? -1 : 1);
}else if (!dp[i] || dp[i]>0 && op==1 || dp[i]<0 && op==-1) break;
end = i;
int temp = abs(dp[i]);
min > temp && (min = temp);
}
for (int j = start; j <= end; j++){
dp[j] += min*op;
if (!dp[j]) line--;
}
cnt += min;
}
printf("%d", cnt);
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 16953] A → B [C/C++] (0) | 2021.08.20 |
---|---|
[백준 5639] 이진 검색 트리 [C] (0) | 2021.08.19 |
[백준 1082] 방 번호 [C] (0) | 2021.08.19 |
[백준 16214] N과 M [C] (0) | 2021.08.18 |
[백준 15666] N과 M (12) [C] (0) | 2021.08.18 |