[TIL-24] Object 문제 풀이

da.circle·2022년 10월 3일
0

TIL

목록 보기
24/44

😎문제

아래 설명을 읽고 getExamResult 함수를 구현하세요.

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

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

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

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

// requiredClasses 인자 예시
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']

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

  1. scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다. 단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다. (알파벳 성적 => 숫자 성적)
    • A+ => 4.5
    • A => 4
    • B+ => 3.5
    • B => 3
    • C+ => 2.5
    • C => 2
    • D+ => 1.5
    • D => 1
    • F => 0
  2. requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 요소간 순서는 다를수 있지만, 이는 채점에 무관합니다.
// 앞서 언급된 예시를 인자로 받은 함수가 반환하는 객체
{
  '생활속의회계': 2,
  '논리적글쓰기': 3,
  '독일문화의이해': 3.5,
  '기초수학': 1.5,
  '영어회화': 2.5,
  '인지발달심리학': 4.5,
  '공학수학': 0,
  '컴퓨터과학개론': 0,
}

😏내 생각

  • 문제 이해하는데도 시간이 조금 걸렸다..
  1. scores안에 있는 과목명만 가져와서 배열을 만든다.(lecture)
  2. scores안에 있는 value도 가져온다. (혹시 모르니까..?)
  3. 각 알파벳에 해당하는 점수를 객체로 만든다.(alphaScores)
  4. scores를 순회하면서 result에 "과목명" = alphaScores[과목성적알파벳]
    이렇게 하면 alphaScores에서 알파벳에 해당하는 숫자값을 가져올 것이다..
  5. requiredClasses를 순회하면서 해당 요소가 lecture안에 있는지 확인해서 false면 값을 0으로 해서 최종 객체에 넣는다!

🤯최종 코드

const convertExamResult = (scores, requiredClasses) => {
  let result = {};

  //scores안에 있는 과목명만 가져와서 배열을 만든다.
  let lecture = Object.keys(scores);

  //scores안에 있는 value도 가져온다. -> 사용안함..
  //let lectureScore = Object.values(scores);

  //각 알파벳에 해당하는 점수를 객체로 만든다.
  let alphaScores = {
    '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 scores) {
    //console.log(i); //생활속의회계
    //console.log(scores[i]) //C
    //console.log(alphaScores[scores[i]]); //2

    //result[변수명]으로 해야한다. result.i로 하면 i : 2 이렇게 들어감
    result[i] = alphaScores[scores[i]];
    //console.log(result);
  }

  for(let i in requiredClasses){
    //console.log(lecture[i]);
    //scores안의 과목명만 있는 배열 lecture안에 requiredClasses요소를 돌면서 요소가 lecture안에 있는지 확인해서 false이면 result 배열에 value 0 으로 할당
    if(lecture.includes(requiredClasses[i]) === false){
      console.log(requiredClasses[i])
      result[requiredClasses[i]] = 0;
    }
  }
  console.log(result);
  return result;
}

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

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

convertExamResult(scores, requiredClasses);

느낀점🤔

  • 저번 String 문제 풀이보다 시간이 배로 걸렸다. 정말 어렵다!
  • includes를 찾기 전에 이중for문을 사용해서 풀어보려고 했다. for문을 이중으로 사용하니 오히려 코드도 복잡해지고 생각도 같이 복잡해져서 더 어렵게 느껴졌다.
  • for - in으로 순회할 때 어떤 배열 또는 객체를 기준으로 잡아야 하는지 생각하는데 오래걸린다.
  • 필요한 문법을 찾는데 검색을 해도 매우 오래 걸린다.
    → 자바스크립트 기본을 자주 들여다보면서 코드를 많이 짜야 한다. 연습량이 부족하다는 생각밖에 들지 않는다.. 더 분발하자!
profile
프론트엔드 개발자를 꿈꾸는 사람( •̀ ω •́ )✧

0개의 댓글