[C언어 코드업 문제풀이] CodeUp 1571 : [기초-함수작성] 함수로 Upper Bound 위치 리턴하기

코드업 1571번 함수로 Upper Bound 위치 리턴하기 문제 풀이 해답입니다.

 

1. 문제 설명

 

데이터가 오름차순으로 저장되어있는 배열에서
어떤 값보다 큰 값이 처음 나타나는 위치를 출력하시오. 
(저장되어있는 값들이 입력된 값보다 모두 작거나 같다면 저장되어있는 데이터개수+1을 출력한다.)

함수형 문제이므로 함수 upper_bound()만 작성하여 제출하시오.

예를 들어 1번 자리부터 10개의 데이터가 오름차순으로 저장되어있는 배열 
2 3 5 7 9 11 13 17 19 23 에서
값 6 보다 큰 값이 처음 나타나는 위치는 4 이다.
값 24 는 저장되어있는 모든 값들보다 크므로 11을 출력한다.


참고
upper_bound()는 이미 정렬 되어있는 데이터의 중간에 데이터를 삽입하려고 할 때,
기존의 정렬된 상태를 유지하면서 새로운 데이터를 넣을 수 있는 가장 마지막 위치를 의미한다.



[함수형 문제란??]
함수형 문제는 기본적인 main() 등은 미리 작성되어 있습니다.
미리 작성되어 있는 프로그램은 다음과 같습니다.

미리 작성된 프로그램을 복사해 붙여 넣은 후 함수 부분을 설계하여 작성해 넣고,
테스트 한 후, 함수 부분만 제출하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int n, k, d[1010];
// 이 부분에 들어가야 될 코드를 작성하여 제출
int main()
{
   scanf("%d"&n);
 
  for(int i=1; i<=n; i++)
    scanf("%d"&d[i]);
 
  scanf("%d"&k);
 
  printf("%d\n", upper_bound(k));
}

 

2. 입력

 

첫 줄에 데이터의 개수(n)가 입력된다.
두 번째 줄에 n개의 오름차순 데이터(ki)가 공백을 두고 입력된다.
세 번째 줄에 찾기를 수행할 값(k)이 입력된다.
(1 <= n <= 1000)
(-2147483648 <= ki,k <= 2147483647)

 

3. 출력

 

입력된 값보다 큰 값이 저장된 처음 위치를 출력한다.
(입력된 값이 저장되어있는 모든 값보다 크거나 같으면 n+1 값을 출력한다.)

 

4. 입력 예시

 

5

1 3 5 7 9

4

 

5. 출력 예시

 

3

 

6. 문제 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int n, k, d[1010];
int upper_bound(int k) {
    for (int i = 1; i <= n; i++) {
        if (k < d[i] ) {
            return i;
            break;
        }
    }
    return n+1;
 
}
int main()
{
   scanf("%d"&n);
 
  for(int i=1; i<=n; i++)
    scanf("%d"&d[i]);
 
  scanf("%d"&k);
 
  printf("%d\n", upper_bound(k));
}

댓글()