[JS] 프로그래머스 코딩테스트 - 다단계 칫솔판매

권이온·2025년 9월 14일

📚 문제

다단계 칫솔판매

📣 풀이

  • 시도한 풀이

    function solution(enroll, referral, seller, amount) {
      let result = {};
      let parent = {};
    
      for (let i = 0; i < enroll.length; i++) {
          parent[enroll[i]] = referral[i];
      }
    
      for (let name of enroll) {
          result[name] = 0;
      }
    
      for (let j = 0; j < seller.length; j++) {
          let money = amount[j] * 100;
          let curName = seller[j];
    
          while(curName !== "-" && money > 0) {
              result[curName] += money - Math.floor(money / 10);
              curName = parent[curName];
              money = Math.floor(money / 10);
          }
      }
    
      return enroll.map(name => result[name]);
    }

💫코드 리뷰 & 반성

[어려웠던 점]
결국에는 “-”가 나올 때까지 거슬러 가야 하는 부분이 어려웠다. while 쓰기.

[새롭게 알게된 점]
1. Math.floor() - 소수점 있으면 버림

2. return enroll.map(name => result[name]);
마지막에 map 써서 배열로 변한.

Array.prototype.map()은 배열의 각 요소를 주어진 함수로 변환한 결과를 모아서
새 배열을 만듬.

map은 enroll 배열의 각 요소(name)를 하나씩 꺼낸 후 result[name] 값을 꺼냄.
그 값들을 새로운 배열에 넣음.

3. Array.from()과 new Array().fill()
전자는 인덱스를 이용하여 초기화 시켜야할 때 / 배열의 요소를 객체나 배열로 초기화 시켜야할 때.
후자는 기본 자료형으로 초기화할 때.

4. 꼭 {}를 써야하나? []를 쓰면 안 되나?
써도 된다!

(1) {}를 사용했을 때

{}를 사용했을 때

(2) []를 사용했을 때

[]를 사용했을 때

데이터의 양이 늘어날 수록 성능 차이가 유의미해지는 걸 볼 수 있다.
배열에 문자열 키를 쓰게 되면 일반 객체처럼 취급되면서 희소 배열 처리가 되어 느려진다고 한다.

참고

코딩 테스트 합격자 되기 자바스크립트 - 이선협, 박경록 저
new Array().fill()과 Array.from()의 차이

profile
인생은 아름다워

0개의 댓글