본문 바로가기

문제풀이/C++

[C++] 층간소음

728x90

[목적]

N초 동안의 소음이 M값을 넘으면 경보음이 울리는 프로그램이다.

N초 동안의 1초마다의 실시간 측정치를 받아 최대 연속으로 경보음이 울린 시간을 출력하는 프로그램이다.

만약, 경보음이 없으면 -1을 출력한다.

 

[입력예제]

10 90
23 17 120 34 112 136 123 23 25 113

 

[출력예제]

3

 

10초동안 90을 넘는 소음이 들리게 될 시 경보음이 울리게 된다.

여기서 가장 경보음이 길게 울린 구간은 5~7초까지의 3초이였기에 3을 출력하였다.


[코드]

#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {
    
    int n, m, desi, cnt = 0, max = 0;
    
    cin >> n >> m;

    for (int i=0; i<n; i++){
        cin >> desi;
        if(desi > m) cnt++;
        else cnt = 0;
        if (cnt > max) max = cnt;
    }

    if(max == 0) cout << "-1";
    else cout << max;
	
    return 0;
}

1. 먼저 초에 해당하는 n값과 기준 측정치 m을 입력받는다.

2. 1초마다의 입력값을 받기 위해 for문을 작성한다.

3. for문 안에서 1초마다의 소음 측정치(desi)를 입력받는다.

4. 입력받은 측정치가 기준 측정치를 넘으면 카운트(cnt)를 +1 해준다.

5. 기준 측정치를 넘지 않은 경우에는 카운트를 0으로 초기화 시켜준다.

6. 연속으로 가장 길게 울린 시간을 알아보기 위해 카운트와 max를 비교하여 카운트가 클 경우 max에 값을 넣는다.

7. for문을 빠져나왔을 때 max값이 0이라면 경보음이 울리지 않은 것이므로 -1을 출력하고 그렇지 않다면 max값을 출력한다.

 

[실행 결과]

728x90
반응형

'문제풀이 > C++' 카테고리의 다른 글

[C++] 가위 바위 보  (0) 2021.01.06
[C++] 분노 유발자  (0) 2021.01.05
[C++] 선생님 퀴즈  (0) 2021.01.02
[C++] Anagram  (0) 2021.01.01
[C++] 소수의 개수  (0) 2021.01.01