정수로 이루어진 배열과 두 개의 숫자 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