문제풀이 : 객체 순회 응용

강지원·2021년 10월 15일
0
post-thumbnail

getExamResult 함수를 구현.

인자 scores 는 다음과 같은 객체입니다.
객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다.
객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.

  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'

{
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}

인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.

['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']

다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요.

  • scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다.
    단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.
    A+ => 4.5
    A => 4
    B+ => 3.5
    B => 3
    C+ => 2.5
    C => 2
    D+ => 1.5
    D => 1
    F => 0

  • requiredClasses 배열의 요소로는 존재하지만, scores의 키로는
    존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고,
    값으로 0을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이
    인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다.
    요소간 순서는 다를수 있지만, 채점에 무관합니다.

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

1. 결과 코드

const getExamResult = (scores, requiredClasses) => {
let result = {};
console.log(scores)

const grade = {
  'A+':4.5,
  'A': 4,
  'B+': 3.5,
  'B': 3,
  'C+': 2.5,
  'C': 2,
  'D+': 1.5,
  'D': 1,
  'F': 0,
}

for(let key in scores) {
  scores[key] = grade[scores[key]];
  result[key] = scores[key];
}
console.log(result);

for(i = 0; i < requiredClasses.length; i++) {
  const requiredClassesName = requiredClasses[i];
  if(result[requiredClassesName] === undefined) {
    result[requiredClassesName] = 0;
  }
}
return result;

2. 풀이 과정

인자 scores는 객체였다.

문제에서 요구하는 포인트 중 하나인
scores의 value값을 교체해주기 위해서 scores 값과 연결되는
새로운 객체를 하나 생성해주었다.

grade 라는 이름을 지닌 객체를 생성해서 for in을 활용.

객체를 순회하며 각 key 데이터를 활용해 scores의 value를
교체했다. 그리고 새로운 객체 result를 만들어 socres의 값을 공유했다.

requiredClasses라는 배열 안에 있는 데이터가
result의 key에는 존재하되, value값이 없다면 0을 주도록 해줘야 했다.

requiredClasses의 데이터와 result의 key 값이 일치하므로 이 점을
활용해서 문제를 해결해나가면 될 거 같았다.
requiredClasses는 배열이니 배열의 각 데이터를 순회하기 위해
for문을 사용해줬다.

for문 내부 조건으로는 연결되는 데이터를 활용해
result[key]가 없는 상태로 확인이 된다면 result[key]를 0으로
만들어주고 최종적으로 result를 반환해주기로 했다.

profile
'Why' better than 'Yes'

0개의 댓글