Wecode Javascript 30번 문제에 대하여..

김인태·2022년 5월 28일
0

문제는 이러하다.

**아래 설명을 읽고 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.아래 설명을 읽고 getExamResult 함수를 구현하세요

const getExamResult = (scores, requiredClasses) =>{}

2.인자 scores 는 다음과 같은 객체입니다.객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.

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

3.인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']

let requiredClasses = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론','카를로스'] <= 카를로스는 제가 테스트 하기위해 임의의 값을 넣어보았습니다.

4.scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다. 단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
즉 A-F까지 있는 scores객체의 value 값을 명시되어있는 숫자로 바꾸라고 이해하였습니다. 그렇게 만들기위해선 scores 객체를 for문을 사용해 value값을 바꿔줘야 했습니다.

 const result = {}; //바뀐 결과를 저장할 오브젝트를 만들어주고,
let obj = {
    'A+': 4.5,
    'A': 4,
    'B+': 3.5,
    'B': 3,
    'C+': 2.5,
    'C': 2,
    'D+': 1.5,
    'D': 1,
    'F': 0
  }; //숫자로 바꾸기위한 변수를 선언합니다.
  //for in 문을 사용합니다.
  
   for (let j in scores) {  
    let grade = scores[j]; // grade라는 변수안에 obj안에 있는 value값들이 저장됩니다.
    result[j] = obj[grade];
    //현재 result 값 <- scores 객체
    //result[j]에는 obj[grade]의 value 값인 4.5,4,등등이 들어온다!
  

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

for (let i in requiredClasses) {
   let key = requiredClasses[i]; //requiredClasses 안에 있는  배열 요소들을 key라는 변수에 저장한뒤에
   result[key] = 0;
 }
 //아까 만들어둔 result의 value값을 모두 0으로 만듭니다
 //이렇게되면 result에는 이런식으로 저장됩니다.
 const result ={
 '영어회화' : 0, '기초수학': 0, '공학수학': 0, '컴퓨터과학개론' : 0,'카를로스' : 0}

이코드는 4번에 들어갈 value값들을 미리 0으로 만들어주는 코드이고 결론적으로 합치게 된다면?!

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

let requiredClasses = ['영어회화', '기초수학', '공학수학', '컴퓨터과학개론','김인태']

const getExamResult = (scores, requiredClasses) => {
  const result = {};
  
  let obj = {
    'A+': 4.5,
    'A': 4,
    'B+': 3.5,
    'B': 3,
    'C+': 2.5,
    'C': 2,
    'D+': 1.5,
    'D': 1,
    'F': 0
  };
  
  for (let i in requiredClasses) {
    let key = requiredClasses[i];
    result[key] = 0;
  }
  //Braket Notation!
   //requiredClasses[i] <= 여기안에 for in문이 돌면서 result라는 object 안에 저장
  //그 후에 
  for (let j in scores) {  
    let grade = scores[j];
    //value 저장
    result[j] = obj[grade];
  }  
   
  return result;
}

console.log(getExamResult(scores, requiredClasses))

결과값은?

이렇게 나오게 된다!

몇시간을 고민한 문제를 멘토님이나 쉽게 푸시는 다른분들을 보고 더 열심히 해야겠다는 자극을 또 느꼈다. 또한 문제를 하나하나 천천히 생각해보는 연습을 더해야할 것 같다. 길게 가보자..!

profile
새로운 걸 배우는 것을 좋아하는 프론트엔드 개발자입니다!

0개의 댓글