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

+ Recent posts