기타등등/알고리즘 기록

[C++]층간소음

CodeJB 2021. 6. 19. 17:38

처음에 짠 코드

#include <iostream>

using namespace std;
int main() {
    //예를들어, 10초동안 체크하는 경보기 = for문 10번 돌린다.
    //연속으로 M이상인 경우 = counting
    
    int N,M,i,num, res,max = -2147000000;
    int cnt[100];
    
    cin >> N >> M;
    
    cnt[0] = 0;
    
    for(i = 1; i <= N; i++){
        cin >> num;
        if(num > M){
            cnt[i] = cnt[i-1] + 1;
        }else {
            cnt[i] = 0;
        }
    }
    
    for(i = 1; i <= N; i++){
        if(cnt[i] > max){
            max = cnt[i];
        }
    }
    
    cout << max;
     
    return 0;
}
  • M보다 크면 카운팅을 하는데, 카운팅한 값을 배열에 저장해놓고
  • 다음 for문에서 배열을 체크해서 max값을 뽑아냈다.
  • 카운팅을 하다가 M보다 작으면 0으로 떨어지기 때문에 무조건 배열에 저장해놓아야겠다고 생각했다.

더 효율적인 코드

#include <iostream>

using namespace std;
int main() {
    //예를들어, 10초동안 체크하는 경보기 = for문 10번 돌린다.
    //연속으로 M이상인 경우 = counting
    
    int N,M,i,num, res,max = -2147000000;
    int cnt;
    cin >> N >> M;
    
    for(i = 1; i <= N; i++){
        cin >> num;
        if (num > M) cnt++;
        else cnt = 0;
        
        if(cnt > max) max = cnt; // 바로 max에 넣으면 되는거였네..
    }
    
    if(max == 0) cout << -1 << "\n";
    else cout << max;
    
    return 0;
}
  • 바보인가보다.. 배열에 저장해놓을 필요 없이 그때그때 가장 큰 값을 그냥 바로 max에 넣어주면 되는거였다...
  • 그럼 0으로 떨어져도 max에는 남아있으니까..
  • 아직 멀었다 ㅠㅠㅠ

'기타등등 > 알고리즘 기록' 카테고리의 다른 글

[C++]가위바위보  (0) 2021.06.19
[C++]분노 유발자  (0) 2021.06.19
[C++] 아나그램  (0) 2021.06.18
[C++]뒤집은 소수  (0) 2021.06.18
[C++]가장 많이 사용된 자릿수  (0) 2021.06.18