PS/Baekjoon Online Judge

[백준 2879] 코딩은 예쁘게 [C]

kimyoungrok 2021. 8. 19. 05:15

백준 - 2879


풀이

현재 탭의 개수에서 올바른 탭의 개수만큼 빼서 계산할 탭의 수만 남겨준 후, 부호가 같은 그룹을 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);
}

출처

 

2879번: 코딩은 예쁘게

첫째 줄에 줄의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 현재 줄에 있는 탭의 개수가 주어지며, 1번째 줄부터 순서대로 주어진다. 탭의 개수는 0보다 크거나 같고, 80보다 작거나 같은 정수

www.acmicpc.net

'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