19번 문제   

 

 

    내가 풀이한 답   

  배열안에서 뒤에 나오는 숫자들과 비교해서 큰 숫자나 같은 숫자 존재하면 분노 유발자가 없다고 생각하였다. 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);
	
	int n, i, j, avenger = 0;
	bool flag;
	scanf("%d", &n);
	int *arr = (int *)malloc(sizeof(int) * n);
    
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	for(i=0; i<n-1; i++){
		flag = true;
		for(j=i+1; j<n; j++){
			if(arr[i] <= arr[j]){
				flag = false;
				break;
			}
		}
		if(flag) avenger++;
	}
	
	printf("%d", avenger);
    
    free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 

 

    사이트의 답안   

 

#include<stdio.h>			
int main(){
	//freopen("input.txt", "rt", stdin);
	int n, i, cnt=0, h[101], max;
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		scanf("%d", &h[i]);
	}
	max=h[n];
	for(i=n-1; i>=1; i--){
		if(h[i]>max){
			max=h[i];
			cnt++;
		}
	}		
	printf("%d\n", cnt);			
	return 0;
}

 

  사이트의 답은 거꾸로 생각해서 접근하였다. 뒤에서부터 차례로 비교해서 앞에 숫자와 비교해서 앞의 숫자가 크면 분노 유발자가 되는 것이다.

 

 거꾸로 접근하는 방법도 잊지 않았어야 했는데 앞으로는 명심해야겠다. 

 

 

#include <iostream>
using namespace std;

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);
	
	int n, i, avenger = 0;
	cin >> n;
	int *arr = new int[n];
	
	for(i=0; i<n; i++){
		cin >> arr[i];
	}
	
	int max = arr[n-1];

	for(i=n-2; i>=0; i--){
		if(max < arr[i]){
			max = arr[i];
			avenger++;
		}
	}
	
	cout << avenger << endl;
	delete[] arr;
	
	return 0;
}

 

 오랜만에 C++로 다시 짜보았다.

 

 결과는 통과하였다.

 

 

 

 

'알고리즘 & 자료구조 > 기초 다잡기' 카테고리의 다른 글

21. 카드게임  (0) 2020.09.07
20. 가위 바위 보  (0) 2020.09.07
18. 층간소음  (0) 2020.09.07
17. 선생님 퀴즈  (0) 2020.09.06
16. Anagram(아나그램)  (0) 2020.09.06