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 |