백준 25305 커트라인 문제풀이

2023. 4. 17. 21:19카테고리 없음

▶문제

2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에�명의 학생들이 응시했다.

이들 중 점수가 가장 높은 명은 상을 받을 것이다. 이때, 상을 받는 커트라인이 몇 점인지 구하라.

커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.

 

요약하자면 

응시자 수와 수상자 수를 입력받고 마지막 수상자의 점수를 출력하는 문제입니다.

 

제가 작성한 코드는 아래와 같습니다.

#include<stdio.h>
int o[1000]={0}, max, count=0; //main과 함수 안에서 공통적으로 쓸 변수 생성
int line(int b); //line 함수 선언
int line2(int a);// line2함수 선언
int main(){
    int a,b; 
    scanf("%d %d",&a,&b);
    for(int i = 0;i<=a-1; i++){
        scanf("%d", &o[i]);
    }
    printf("%d", o[line(b)]);//line 함수에서 진행한 결과값을 출력
}
int line(int b){
    int c;
    while(1){
        for(int i =0; i<sizeof(o)/sizeof(int);i++){ //sizeof로 바이트 비교/ 배열 크기만큼의 숫자를 가져오는 공식임
            if(o[i]>max){
            max = o[i];
            c = i;}
            }
        if(count == b-1){
            return c;
            }   
        line2(c);       
}    
}
int line2(int k){
    o[k]=0;
    max = 0;
    count ++; 
    return 0;    
        
}

나머지는 많이 봐 오셨을 것 같고 제가 새로 알게 된 점과 주의할 점을 말해드리자면

 

아래 코드 같은 부분에선 main 안에서 또는 line 함수 안에서만 쓸 수 있는 변수를 선언하는 것이 아닌

main을 비롯한 다른 함수들에게도 공통적으로 쓸 수 있는 변수를 선언한 것입니다.

3일 동안 헤매던 함수를 이용한 코딩인데 이 부분을 진작 알았다면 조금 더 빨리 풀 수 있지 않았을까 싶습니다.

int o[1000]={0}, max, count=0;

c언어 책을 보며 공부했는데 이 부분은 많이 뒤에 간략하게 나오거나 거의 잘 나오지 않았습니다. ㅜㅜ

이런 방법을 안다면 조금 더 쉽게 풀 수 있겠네요 ㅎㅎ

 

또 line 함수 안 for문에 있는 조건문은 배열 크기만큼의 숫자를 가져오는 공식입니다.

sizeof를 조금 설명하자면  byte 값이라고 생각하시면 됩니다. int 정수형은 4byte라 4가 출력될 것입니다.

 

int i =0; i<sizeof(o)/sizeof(int);i++