https://www.acmicpc.net/problem/9339
9339번: 마라토너
상근이는 마라톤 학원을 운영하고 있다. 학원의 수강생은 총 K명으로, 다가오는 마라톤 대회에 참가하기 위해 연습을 하고 있다. 마라톤 대회가 끝나고, 기록이 6시간 이하인 경우는 마라톤 완주
www.acmicpc.net
난이도 : 브론즈 1
태그 : 구현
1. 설명
수강생들 중 가장 성적이 좋은 수강생과,
통과한 수강생들의 수를 출력하는 문제입니다.
2. 소스코드
<cpp />
#include <stdio.h>
int main() {
int T;
scanf("%d", &T);
while (T--) {
int studentCnt; // 학생의 수
scanf("%d", &studentCnt);
int students[101]; // 학생들의 수 (최대 100명)
for (int i = 0; i < studentCnt; i++) {
scanf("%d", &students[i]);
}
int participantCnt = 0; // 참가자의 수
scanf("%d", &participantCnt);
int bestScore = 987654321; // 최고 점수
int successCnt = 0; // 통과한 학생 수
int bestScoreIdx = 0;
for (int i = 0; i < participantCnt; i++) {
int number, hour, min;
scanf("%d %d %d", &number, &hour, &min);
for (int j = 0; j < studentCnt; j++) {
if (students[j] == number) {
int score = hour * 60 + min;
// 포기 시 -1, -1로 주어짐, 6시간 내 완주 시에만 통과처리
if(score >= 0 && score <= 6 * 60) {
if (score < bestScore) {
bestScore = score;
bestScoreIdx = j;
}
successCnt++;
}
break;
}
}
}
printf("%d %d\n", students[bestScoreIdx], successCnt);
}
}
학생들의 번호를 students에 저장해놓고,
참가자가 수강생이라면 6시간(6시간 * 60분 = 360분) 내 완주했는지를 체크하여
6시간 내 완주라면, 완주자들을 체크하느 successCnt를 1만큼 증가시킵니다.
bestScore는 최고 성적(통과 시간이 가장 낮음)을 저장할 변수이며,
bestScoreIdx는 최고 성적의 index 값을 저장할 변수입니다.
수강생의 기록이 최고 성적일 때마다 해당 값을 갱신시켜줍니다.
'코딩테스트 > C | C++' 카테고리의 다른 글
[백준 3447번] [C언어] 버그왕 (0) | 2022.11.29 |
---|---|
[백준 4158번] [C언어] CD (0) | 2022.11.28 |
[백준 8979번] [C] 올림픽 (0) | 2022.11.15 |
[백준 2704번] [C] 이진법 시계 (0) | 2022.11.15 |
[백준 25205번] [C] 경로당펑크 2077 (0) | 2022.10.14 |