백준 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++