백준(C언어) 풀이/그리디(Greedy) 알고리즘

백준(C) 14659번 한조서열정리하고옴ㅋㅋ 풀이

개발윗미 2021. 8. 18. 10:37

C로 구현한 14659번 한조서열정리하고옴ㅋㅋ 문제 풀이입니다.

 

https://www.acmicpc.net/problem/14659

 

14659번: 한조서열정리하고옴ㅋㅋ

첫째 줄에 봉우리의 수 겸 활잡이의 수 N이 주어진다. (1 ≤ N ≤ 30,000) 둘째 줄에 N개 봉우리의 높이가 왼쪽 봉우리부터 순서대로 주어진다. (1 ≤ 높이 ≤ 100,000) 각각 봉우리의 높이는 중복 없이

www.acmicpc.net


#include <stdio.h>

int main() {
	int arr[100001] = {0,};
	int n, max = 0, result = 0;
	scanf("%d", &n);
	for(int i=0; i<n; i++) {
		scanf("%d", &arr[i]);
	}
	for(int i=0; i<n-1; i++) {
		if(arr[i] != 0) {
			int count = 1;
			while(arr[i] > arr[i+count]) {
				if(arr[i+count] == 0)
					break;
				arr[i+count] = 0;
				result ++;
				count ++;
			}
		}
		if (result > max) {
			max = result;
		}
		result = 0;
	}
	printf("%d", max);
}

 

최고의 활잡이가 처치할 수 있는 적의 최대 숫자에 해당하는 max 변수와

 

현재 활잡이가 처치한 적의 수에 해당하는 result 변수를 선언한다.

 

N개의 봉우리의 높이 입력 수행을 마친 뒤 반복문을 통해 최고의 활잡이가 처치할 수 있는 적의 최대 숫자를 출력한다.

 

여기서 마지막 활잡이는 처치할 수 있는 적의 수가 0이기 때문에 반복문 범위를 n-1까지로 설정한다.

 

반복문 내부에서는 현재의 봉우리 높이가 다음 봉우리 높이보다 클 경우 다음 활잡이를 처치하여 0으로 만들고

 

처지한 적의 수를 1 증가 시킨다.

 

이러한 과정을 while문을 통해 자신의 봉우리 높이보다 더 큰 봉우리 높이가 나올 때까지 반복한다.

 

최종적으로 현재 활잡이가 처치한 적의 수와 지금까지의 최고 활잡이가 처치한 적의 수를 비교하여 더 큰 수를

 

max 변수에 할당한 뒤 출력한다.