본문 바로가기
프로그램/C언어 1000제

C언어 148제] 2022년 연세대학교 미래캠퍼스 슬기로운 코딩생활 B번 커트라인

by 건티 2024. 6. 17.
728x90

출처 : 반크_세계유산 창덕궁

 

문제]

2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 N명의 학생들이 응시했다.
이들 중 점수가 가장 높은 k명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.
커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.

입력
첫째 줄에는 응시자의 수 N과 상을 받는 사람의 수 k가 공백을 사이에 두고 주어진다.
둘째 줄에는 각 학생의 점수 x가 공백을 사이에 두고 주어진다.

출력
상을 받는 커트라인을 출력하라.

제한
1 ≤ N ≤ 1000
1 ≤ k ≤ N
0 ≤ x ≤ 10000

예제 입력 1 
5 2
100 76 85 93 98

예제 출력 1 
98

시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다.

출처 : 백준_25305

 

참고풀이] Dev-C++ 5.11

#include <stdio.h>
#include <stdlib.h> //malloc(), free()

int main()
{
   int N,k;//응시자수와 상을 받는 사람의 수 변수 
   int i,j;//인덱스 또는 반복변수
   int tmp;//임시변수 

   //자료를 입력받는다.
   while(1)
   {
      scanf("%d%d",&N,&k);
      if((N>=1 && N<=1000) && (k>=1 && k<=N)) break;
      printf("응시자가 1<=N<=1000 사이의 가 아니거나, \n");
      printf("상받는 사람의 수가 1<=k<=N 사이의 수가 아닙니다.\n");
      printf("작업을 중지합니다.");
      return 0;
   }

   //응시자 개개인의 점수를 넣을 동적배열변수를 선언한다. 
   int *A=(int *)malloc(sizeof(int)*N);

   for(i=0;i<N;i++) 
   {
      scanf("%d",&A[i]);
      if(A[i]>=0 && A[i]<=10000);
      else 
      {
         printf("점수가 0<=A[i]<=10000 사이의 수가 아닙니다.\n");
         printf("작업을 중지합니다.");
         return 0;
      }
   } 

   //입력받은 점수들을 내림차순 정렬한다. 
   for(i=0;i<N-1;i++) 
   {
      for(j=0+i;j<N;j++)
         if(A[i]<A[j])
         {
            tmp=A[i];
            A[i]=A[j];
            A[j]=tmp;
         }
   }

   //결과출력
   printf("\n%d",A[k-1]);

   //동적배열변수를 해제한다.
   free(A);

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 봄

 

반응형

댓글