[TIL] 내가 풀어본(80%) 리플릿 문제!

choiuhana·2021년 6월 16일
0

TIL

목록 보기
9/37
post-thumbnail

🥉 뭔가 두서가 없는 블로그가 되어가는 듯 하지만..
하루동안 한 여러가지 것들 중에 오늘은 열심히 내 손으로(80%) 풀어본 코드를 리뷰해서 기억에(?) 더 남겨보려 한다.

🕰 오늘의 학습 시간

  • replit 10:20~11:10
  • 위스타그램 11:10~12:20, 12:50~14:10, 20:30~22:30

Assignment

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

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

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

인자 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:1 매칭), for..in, for문, if문 이다.
1:1로 바뀌어야 하기 때문에 새로운 배열을 활용하여 scores의 값을 키로 하는 바꿀 키값을 맵핑시켜 주었다.

     const scoresMap = {
    ["A+"]: 4.5,
    A: 4,
    ["B+"]: 3.5,
    B: 3,
    ["C+"]: 2.5,
    C: 2,
    ["D+"]: 1.5,
    D: 1,
    F:0
  }

다음엔 점수로 바뀐 값을 원래의 키에 값으로 바꿔주기 위해 새롭게 만들어질 배열을 만들고 for..in을 활용하여 scores의 키를 반복해서 불러오고 점수로 바뀐 값을 할당 해 주었다.

const result = {};
     for(const property in scores){
   result[property] = scoresMap[scores[property]]
    }

마지막으로 없는 값을 비교하고 없으면 새로운 키와 값으로 넣는 작업을 하기 위해 for문을 활용하여 반복하고 if문을 통해 조건을 주었다, !을 활용 해 없는 것(false)을 맞는 조건(true)로 바꿔 주었다.

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

오늘 포스팅은 사실 전혀 모르는 사람이 보면 이해하기 어렵지만 정말로 단순하게 내가 나중에 보고 기억을 상기시키기 위한? 정리로 봐도 무방 할것 같다.

다 풀어놓고 실제 문제에서 안해봐서 테스트를 누르고 조마조마 했다는 후문이..😱

profile
만드는 사람도 사용하는 사람도 편하고 만족하는 '것'을 추구하는 프론트엔드 개발자

0개의 댓글