백준 2822번
- 문제
상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다.
상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오.
- 입력
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제, ... 8번 문제이다.
- 출력
첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.
https://www.acmicpc.net/problem/2822
2822번: 점수 계산
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문
www.acmicpc.net
처음이자 정답으로 제출한 코드
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n").map(item=>item.replace('\r',""));
let num_list = [];
//입력받은 값을 문제번호와 점수값을 가지고 있는 obj로서 배열에 저장
for(let i = 0;i<input.length;i++){
num_list.push(new Number(i+1,parseInt(input[i])))
}
//객체값중 점수에해당 하는 값을 정렬
num_list.sort(function (a,b){
if (a.num > b.num) return -1;
else if(a.num < b.num) return 1;
else return 0;
})
//객체 생성 함수
function Number(idx,num){
this.idx = idx;
this.num = num;
}
let result = [];
let total = 0;
//최고 점수5개를 추린 후 총 점수를 구함
for(let i = 0; i<5;i++){
result.push(num_list[i].idx);
total += num_list[i].num;
}
//정답 출력
console.log(total);
console.log(result.sort().join(" "));
위 문제를 고민하면서 가장큰 걸림돌은 문제의 번호를 기억할 변수가 필요했다는 것이다.
쉽게보면 점수를 내림차순으로 정렬한뒤 앞에서부터 5문제를 짜르면되는데
문제는 해당 문제가 몇번쨰인지 정렬을하면서 뒤섞인다는 점이다.
그래서 생각했던 것이 key:value 형태로서 저장해서 value로 정렬하고 출력할땐 key값으로 출력하는 형태를 생각했다.
그러다 구현이 쉬운 객체로 문제를 풀게되었다.
1. index번호 +1(=문제번호) 와 입력받은 점수를 통하여 객체로서 num_list 라는 배열에 저장한다.
2. num_list에 접근하여 점수를 기준으로 정렬하는 sort()를 작성한다.
3. 이후 정렬되어 있는 배열에서 0~4번째 인덱스를 다른 배열에 옮긴다.
4. 해당 배열을 정렬하여 문제번호가 오름차순으로 출력될수 있도록 한다.
문제를 공략한 방법은 위와 같다.
key:value 형태로 데이터를 저장하는 법을 알고 그것을 value와 key를 기준으로 정렬하는 법을 안다면 쉽게 풀 수 있는 문제였던거 같다.
'백준' 카테고리의 다른 글
백준 sliver V 달성 후기 (1) | 2024.04.24 |
---|---|
백준 1181번 "단어정렬" (0) | 2024.04.21 |
백준 1193번 "분수찾기" (1) | 2024.04.20 |
백준 1417번 "소트인사이드" (0) | 2024.04.16 |
백준 2018번 "수들의 합 5" (0) | 2024.04.15 |