[목적]
한 줄에 앉는 학생 수를 입력받은 후 학생 들의 키를 앞자리에 앉은 학생부터 입력받는다.
앉은 학생의 뒷 자리 학생들 보다 키가 큰 경우 분노유발자라 칭한다.
총 분노 유발자가 몇명인지 출력하는 프로그램이다.
[입력예제]
10
56 46 55 76 65 53 52 53 55 50
[출력예제]
3
총 10명의 학생이 한 줄에 앉아있다.
제일 처음에 앉은 친구는 2, 3번째 앉은 친구보단 키가 크지만 그 이후의 친구보다는 키가 작아 분노유발자가 아니다.
하지만 76, 65, 55의 키를 가진 4, 5, 9번째 친구는 뒷자리 친구들 보다 키가 크기에 분노유발자이다.
분노유발자는 총 3명이므로 3을 출력한다.
[코드 1]
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int num, cnt=0, up=0;
cin >> num;
int student[num];
for(int i=0; i<num; i++) cin >> student[i];
for(int i=0; i<num-1; i++){
for(int j=i+1; j<num; j++){
if(student[i]>student[j]) up = 1;
else {
up = 0;
break;
}
}
if(up==1) cnt++;
}
cout << cnt;
return 0;
}
1. 한줄에 앉는 학생 수(num)를 입력받는다.
2. 배열에 학생 수만큼 학생들의 키(student[])를 입력받는다.
3. 이중 for문을 통해 앉아 있는 학생이 자기보다 뒤에 있는 친구들보다 키가 큰지 검사한다.
4. 검사하여 키가 크다면 up변수에 1을 넣어주고 만약 한명이라도 자기보다 큰 친구가 나오면 up을 0으로 만들어 준 뒤 안쪽 for문을 빠져나온다.
5. 안쪽 for문을 빠져나왔을 때 up이 1이라면 뒤에 앉은 친구들보다 키가 큰 것이기에 cnt를 1증가 시켜준다.
6. cnt를 출력한다.
[코드 2]
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int num, cnt=0, max;
cin >> num;
int student[num];
for(int i=0; i<num; i++) cin >> student[i];
max = student[num-1];
for(int i=num-2; i>=0; i--)
if(student[i] > max) {
cnt++;
max = student[i];
}
cout << cnt;
return 0;
}
1. 학생 수를 입력받은 후 학생의 키를 입력받아 배열에 저장한다.
2. 제일 끝에 앉은 학생 키를 max에 저장한다.
3. 뒤에서 앞으로 가며 학생의 키를 비교하여 뒤에 앉은 학생보다 앞에 앉은 학생의 키가 큰 경우 max값을 해당 학생 키로 바꿔주고 cnt값을 1 올려준다.
[예시]
56 | 46 | 55 | 76 | 65 | 53 | 52 | 53 | 55 | 50 |
1. max(student[9]) = 50, cnt = 0, student[8] = 55
현재 max값은 50으로 바로 앞의 55와 비교 하였을 때 55가 더 큰 숫자이니 max값에 55를 넣어주고 cnt값을 1 올려준다.
2. max(student[8]) = 55, cnt = 1, student[7] = 53
55가 더 크므로 변동이 없다.
3. max(student[8]) = 55, cnt = 1, student[6] = 52
55가 더 크므로 변동이 없다.
4. max(student[8]) = 55, cnt = 1, student[5] = 53
55가 더 크므로 변동이 없다.
5. max(student[8]) = 55, cnt = 1, student[4] = 65
max값 55보다 65가 더 크므로 max는 65로 변경, cnt는 1이 올라 2가된다.
6. max(student[5]) = 65, cnt = 2, student[3] = 76
max값 65보다 76이 더 크므로 max는 76로 변경, cnt는 1이 올라 3이된다.
7. max(student[3]) = 76, cnt = 3, student[2] = 55
76이 더 크므로 변동이 없다.
8. max(student[3]) = 76, cnt = 3, student[1] = 46
76이 더 크므로 변동이 없다.
9. max(student[3]) = 76, cnt = 3, student[0] = 56
76이 더 크므로 변동이 없다.
[실행 결과]
'문제풀이 > C++' 카테고리의 다른 글
[C++] 카드게임 (0) | 2021.01.08 |
---|---|
[C++] 가위 바위 보 (0) | 2021.01.06 |
[C++] 층간소음 (0) | 2021.01.05 |
[C++] 선생님 퀴즈 (0) | 2021.01.02 |
[C++] Anagram (0) | 2021.01.01 |