[2021.07.29]

Darlene·2021년 7월 29일
0

문제 1)

학생들의 점수를 공백으로 구분하여 입력을 받고 그 중 1~3위 학생(여러명일 수 있음, 중복 포함)들에게 사탕을 주기로 하였는데 사탕을 받을 학생의 수를 출력하시오.

입력 : 97 86 75 66 55 97 85 97 97 95
출력 : 6

1. 요구사상 분석

상위 3위가 총 몇 명인지 구하기

2. 요구사항을 구체적이고 절차적으로 변환하기

  1. 점수를 공백으로 입력 받는다.

  2. 아래와 같이 입력된 점수와 횟수를 묶어낸다. => 객체 활용하기
    { '55': 1, '66': 1, '75': 1, '85': 1, '86': 1, '95': 1, '97': 4 }

  3. Object.keys()를 활용하여 배열의 속성 이름을 배열로 담아낸다.

  4. consol.log로 어떤 배열이 나오는지 확인한다.
    확인해보니
    ['55', '66', '75', '85', '86', '95', '97']
    이렇게 배열이 자동 정렬이 되어 있는 것을 확인 할 수 있다.

  5. sort() 메소드를 활용해서 정렬을 뒤집어 준다.

  6. 그리고 배열의 0번째, 1번째, 2번째의 value값만 더하는 로직을 만들어 준다.

3. 코드로 작성하기

답안지 작성
const score = prompt('점수를 공백으로 입력하세요. 상위 3위는 몇 명인지 알려드려요.').split(' ');

let object = {};
let result = 0;

for (key of score) {
  object[key] = object[key] === undefined 
  ? 1
  : object[key] = object[key] + 1; 
}

for (let i = 0; i <= 2; i ++) {
let member = Object.keys(object).sort((a,b)=> b-a);

result += object[member[i]];
}

console.log(result);

// 입력 : 97 86 75 66 55 97 85 97 97 95
// 출력 : 6

🙏 회고

알고리즘 문제를 풀면서 인터넷 강의로 접했던 개념들을 실제로 어떻게 적용해야하는지 막막했었다.
누군가에게는 쉬운 문제일지라도 나에게는 어려운 문제들이다.
오늘 푼 문제는 몇 일 전 알게된 개념 활용을 하는 할 수 있는 비슷한 문제였는데도 해결하는데 오래걸렸다.
생각의 힘과 반복을 통해 메서드 활용을 잘 하도록 노력해야겠다.

그리고 이번 문제를 풀면서도 데이터 타입 설정을 잘못하여 문제가 발생하였는데 항상 가장 기본인 부분부터 잘 다지도록 하자.


0개의 댓글