Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 배열에서 주어진 두 요소 사이의 요소 개수 구하기


정수로 이루어진 배열과 두 개의 숫자 start(시작)와 end(끝)가 주어졌을 때, 배열 안에서 start와 end 사이에 존재하는 요소의 개수를 계산하는 것이 이번 문제의 목표입니다.

배열이란?

배열(array)은 동일한 자료형의 요소들을 고정된 크기로 순차적으로 저장할 수 있는 자료구조입니다. 데이터 집합을 저장하는 용도로 사용되지만, 같은 타입의 변수들이 모인 하나의 컬렉션으로 이해하면 더욱 유용합니다. 만약 start 요소가 배열에 여러 번 등장한다면 첫 번째 등장 위치를 기준으로 삼고, end 요소가 여러 번 등장한다면 마지막(뒤쪽) 등장 위치를 기준으로 삼습니다.

예시

입력 − int arr[] = {1, 2, 3, 4, 5, 6, 7}
    Start = 1, End = 7
출력 − 개수는 5

설명 − 주어진 배열에는 7개의 요소가 있고, 범위는 1부터 7까지입니다. 이 범위 사이에는 총 5개의 요소(2, 3, 4, 5, 6)가 존재합니다.

입력 − int arr[] = {1, 2, 3, 4, 5, 6, 7}
    Start = 7, End = 9
출력 − 개수는 0

설명 − 주어진 배열에는 7개의 요소가 있고, 범위는 7부터 9까지입니다. 이 범위 사이에 해당하는 요소가 없으므로 개수는 0입니다.

프로그램에서 사용한 접근 방식

  • 정수형 배열(int arr[])을 입력받습니다.
  • 배열의 길이 n을 계산합니다.
  • i를 0부터 시작하여 i가 배열 크기보다 작을 동안 반복하는 루프를 실행합니다.
  • 루프 안에서 arr[i] == start이면 break로 루프를 종료합니다.
  • i가 size-1보다 크거나 같으면 0을 반환합니다(start가 존재하지 않거나 마지막 위치에 있는 경우).
  • j를 size-1부터 시작하여 j가 i+1보다 크거나 같은 동안 1씩 감소시키는 두 번째 루프를 실행합니다.
  • arr[j] == end이면 break로 루프를 종료합니다.
  • j == i이면 0을 반환합니다(end가 존재하지 않는 경우).
  • j - i - 1을 반환합니다.
  • 결과를 출력합니다.

예제 코드

#include <iostream>
using namespace std;
// 두 요소 사이의 숫자 개수를 세는 함수
int countelements(int ar[], int n, int start, int end){
    // start 찾기
    int i = 0;
    for (i = 0; i < n; i++){
       if (ar[i] == start){
          break;
       }
    }
    // start가 없거나 마지막에 있는 경우
    if (i >= n-1){
       return 0;
    }
    // end 찾기
    int j;
    for (j = n-1; j >= i+1; j--){
       if (ar[j] == end){
          break;
       }
    }
    // end가 없는 경우
    if (j == i){
       return 0;
    }
    // 두 요소 사이의 요소 개수
    return (j - i - 1);
}
// 메인 함수
int main(){
    int ar[] = { 1, 6, 2, 5, 9, 8, 3, 7, 4 };
    int n = sizeof(ar) / sizeof(ar[0]);
    int start = 5, end = 4;
    cout << "count is " << countelements(ar, n, start, end);
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 −

count is 4