- 문제
백준 2822번: 점수 계산
https://www.acmicpc.net/problem/2822
문제
상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다.
입력
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제, ... 8번 문제이다.
출력
첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.
- 코드
#include <stdio.h>
// 백준 2822번: 점수 계산
int main(){
int arr[8][2];
for(int i = 0; i < 8; i++){
scanf("%d", &arr[i][0]);
arr[i][1] = i + 1;
}
int temp;
for(int i = 0; i < 7; i++){
for(int j = 0; j < 7; j++){
if(arr[j][0] < arr[j + 1][0]){
temp = arr[j + 1][0];
arr[j + 1][0] = arr[j][0];
arr[j][0] = temp;
temp = arr[j + 1][1];
arr[j + 1][1] = arr[j][1];
arr[j][1] = temp;
}
}
}
int sum = 0;
for(int i = 0; i < 5; i++){
sum += arr[i][0];
}
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if(arr[j][1] > arr[j + 1][1]){
temp = arr[j + 1][1];
arr[j + 1][1] = arr[j][1];
arr[j][1] = temp;
}
}
}
printf("%d\n", sum);
for(int i = 0; i < 5; i++){
printf("%d ", arr[i][1]);
}
return 0;
}
- 문제풀이방법
- 2차원 배열을 만들어 점수와 번호를 저장한다.
- 배열을 내림차순(점수 기준)으로 정렬한다. (번호도 점수에 따라 정렬 해야함)
- 2 에서 정렬한 배열의 0 ~ 5의 점수를 더 한다. -> 총점수
- 배열을 오름차순(번호 기준)으로 정렬한다.(점수는 정렬할 필요 없음)
- 4 에서 정렬한 배열의 0 ~ 5의 번호를 차례대로 출력한다.
배열을 사용할 줄 안다면 무리 없이 풀 수 있는 문제라고 생각한다.
'백준' 카테고리의 다른 글
[C언어] 백준 1735번: 분수 합 (0) | 2024.08.24 |
---|---|
[C언어] 백준 2161번: 카드1 (0) | 2024.08.24 |
[C언어] 백준 2839번: 설탕 배달 (2) | 2024.08.23 |
[C언어] 백준 2485번: 가로수 (0) | 2024.08.23 |
[C언어] 백준 10815번: 숫자 카드 (0) | 2024.08.22 |