[알고리즘]/CodeTree

[codetree] 프로그래밍 연습 _시뮬레이션2_최장 연속 부분 수열

우당탕탕 개발 일지 2025. 3. 27. 14:44

안녕하세요. 우당탕탕 개발일지 입니다. 꾸준히 문제 풀기 다시 시작해보겠습니다. 

codetree가 마음에 들어 순서대로 풀고 있습니다. 아자아자 화이팅!

 

 

 

최장 연속 부분 수열은 개념 파트만 잘 읽으면 술술 풀립니다.!

arr [i-1]과 비교할때는 주의할 점이 i=0인 경우만 주의 해주면 됩니다.! 

  • i>=1인 경우를 AND로 연산하면 i==0이나 i<0인 경우는 포함되지 않습니다.
  • i==0인 경우를 OR로 연산하면 i가 0인 경우 조건을 만족해 arr[i-1]의 연산까지 진행하지 않습니다. 
// 같은 배열이 반복될때 

for(int i=0; i<n; i++)
{
	if(i>=1 && arr[i]==arr[i-1])  //***
    {
    	cnt++;
    }
    else
    {
    	cnt=1;
    }

}



//다른 배열만 반복될때

if(i==0 || arr[i]!=arr[i-1]) //***

 

 

 


<연습문제 + 테스트 문제 >

 

1. 숫자가 동일한 연속 부분 수열

#include <iostream>
#include<algorithm>
using namespace std;

int main() {
    // Please write your code here.

    int n;
    cin>>n;

    int cnt=0;
    int a=0;

    int arr[1000];

    for(int i=0; i<n; i++)
    {
        cin>>arr[i];
    }


    for(int i=0; i<n; i++)
    {
       
        if(i>=1 && arr[i]==arr[i-1])
        {
            cnt++;
        }
        else
        {
            cnt=1;
        }
        
        a=max(a,cnt);
       
    }

    
    cout<<a;
    return 0;
}

 

 


2. 연속되는 수 3

#include <iostream>
#include<algorithm>
using namespace std;

int main() {
    // Please write your code here.

    int n;
    cin>>n;

    int cnt=0;
    int a=0;

    int arr[1000];

    for(int i=0; i<n; i++)
    {
        cin>>arr[i];
    }


    for(int i=0; i<n; i++)
    {
       
        if(i>=1 && ( arr[i]>0 && arr[i-1]>0))
        {
            cnt++;
        }
        else if(i>=1 && (arr[i]<0 && arr[i-1]<0))
        {
            cnt++;
        }
        else
        {
            cnt=1;
        }
        
        a=max(a,cnt);
       
    }

    
    cout<<a;
    return 0;
}

 

 


 

3.연속되는 수4

#include <iostream>
#include<algorithm>
using namespace std;

int main() {

    int n;
    cin>>n;

    int arr[1000];
    for(int i=0; i<n; i++)
    {
        cin>>arr[i];
    }

    int cnt=0;
    int a=0;
    for(int i=0; i<n; i++)
    {
        if(i>=1 && (arr[i]>arr[i-1]))
        {
            cnt++;
        }
        else
        {
            cnt=1;
        }
        a=max(a,cnt);
    }

    cout<<a;
    // Please write your code here.
    return 0;
}

 


 

4. T를 초과하는 연속 부분 수열 

#include <iostream>
#include<algorithm>
using namespace std;

int main() {
    // Please write your code here.


    int n;
    int k; 

    cin>>n>>k;

    int arr[1000];
    int cnt=0;
    int a=0;

    for(int i=0; i<n; i++)
    {
        cin>>arr[i];
    }

    for(int i=0; i<n; i++)
    {
        if(i!=0 &&   arr[i-1]>k && arr[i]>k )
        {
            cnt++;
        }
        else
        {
            cnt=1;
        }

        a=max(a,cnt);
    }
    
    cout<<a;

    
    return 0;
}

 

 

 

 

 

 

 

 

 

벌써 개강해서 제가 3학년이 되었네요.. 오마이갓..

 

 

 

 

728x90