본문 바로가기

문제풀이/C++

[C++] 분노 유발자

728x90

[목적]

한 줄에 앉는 학생 수를 입력받은 후 학생 들의 키를 앞자리에 앉은 학생부터 입력받는다.

앉은 학생의 뒷 자리 학생들 보다 키가 큰 경우 분노유발자라 칭한다.

총 분노 유발자가 몇명인지 출력하는 프로그램이다.

 

[입력예제]

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이 더 크므로 변동이 없다.

 

[실행 결과]

 

728x90
반응형

'문제풀이 > 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