[코딩테스트 풀기] 시험 결과 구하기

지원·2022년 8월 18일
1
post-thumbnail

getExamResult 함수 구현하기

[TEST 내용]

조건

  1. getExamResult 함수는 scores(객체), requiredClasses(배열) 두 가지 인자를 받는다.
  2. scores는 다음과 같은 객체
    객체의 property는 과목명,
    객체의 값은 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F' 중에 하나를 갖는다
    <scores 예시>
    {
     '생활속의회계': 'C',
     '논리적글쓰기': 'B',
     '독일문화의이해': 'B+',
     '기초수학': 'D+',
     '영어회화': 'C+',
     '인지발달심리학': 'A+',
    }
  3. requiredClasses는 아래와 같이 과목명으로 이루어진 배열이다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']

문제

  1. scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 한다.
  2. scores 키들의 값은 아래 원리에 따라 숫자로 바뀌어서 할당 되어야 한다.
  3. requiredClasses 요소로는 존재하지만, scores의 키 값으로 존재하지 않는 과목명이 있다면, 새로운 객체의 키로 추가하고, 값은 0으로 지정.

Expected

{
  '생활속의회계': 2,
  '논리적글쓰기': 3,
  '독일문화의이해': 3.5,
  '기초수학': 1.5,
  '영어회화': 2.5,
  '인지발달심리학': 4.5,
  '공학수학': 0,
  '컴퓨터과학개론': 0,
}



[To do]

  1. 새로운 빈 객체(answer) 만들기
  2. answer에 기존 키를 넣어주되, 그 값은 기존 알파벳 스코어에 맞는 숫자 스코어로 바꿔서 넣어주기 ➡️ for...in 사용
  3. requiredClasses에 있으나, 기존 객체 키에 없는 과목명을 추가해주기 (해당 값은 0) ➡️ indexOf사용

[문제 풀이 방식]

1) 점수를 숫자로 바꿀 수 있는 index 만들어 두기, answer 빈 객체 만들기

const getExamResult = (scores, requiredClasses) => {
  // 알파벳 스코어 배열 인덱스, 숫자 스코어 배열 인덱스
  let alphabetScore = ["A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"];
  let numScore = [4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0];
  let answer = {};
  • 각 index 번호가 같기 때문에, 추후에 indexOf로 대치되는 숫자 점수 찾기 가능

2) for in을 사용하여, scores 객체에서 알파벳 점수를 숫자 점수로 바꾸기

  for (let property in scores) {
    const value = scores[property];
    // value는 각 과목의 알파벳 점수
    const numericScores = numScore[alphabetScore.indexOf(value)];
    // alphabetScore 배열에서 value값의 index를 찾아서 numScore의 인덱스 값으로 지정한 것을 새로운 변수로 저장
    answer[property] = numericScores;
  }
  // answer의 property를 가져오고, 그 값은 위에서 변경된 숫자 값 할당

3) requiredClasses에는 있으나, 기존 객체에 없는 과목을 answer에 추가

  const titles = Object.keys(scores);
// 기존 객체의 과목명을 가져와서 배열로 만들기
  for (i = 0; i < requiredClasses.length; i++){
    if (titles.indexOf(requiredClasses[i]) == -1) {
      answer[requiredClasses[i]] = 0;
    }
  }
  return answer;
};
//  array.indexOf(value) 에서 value가 array에 없으면 -1을 반환 하는 것을 활용
// indexOf == -1이면 answer 객체에다가 requiredClasses의 해당 인덱스를 property로 넣고, 그 값은 0으로 할당

[완성된 코드]

const getExamResult = (scores, requiredClasses) => {
  // 알파벳 스코어 배열 인덱스, 숫자 스코어 배열 인덱스
  let alphabetScore = ["A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"];
  let numScore = [4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0];

  // 빈 객체 하나 만들어 놓고
  let answer = {};

  //  프로퍼티 의 알파벳 점수를  숫자점수로 바꾸기
  for (let property in scores) {
    const value = scores[property];
    const numericScores = numScore[alphabetScore.indexOf(value)];
    answer[property] = numericScores;
  }

  const titles = Object.keys(scores);
  for (i = 0; i < requiredClasses.length; i++) {
    if (titles.indexOf(requiredClasses[i]) == -1) {
      answer[requiredClasses[i]] = 0;
    }
  }

  return answer;
};

[풀면서 배운 내용]

1) 객체에 접근하는 방법

  • property가 변수일때는 [ ] 대괄호 사용해서 접근한다.
  • 객체의 property에 값을 할당할 때에는
    object[property] = 할당하고싶은 값 ;


2) for - in 사용법

  • 기존 for 문을 사용해도 되지만, 간단하게 표현하기 위해 for in 사용
for (let property in object) {실행 내용}

object 개념이 너무 어려워요,,

profile
안녕하세요 지원입니다.

0개의 댓글