JS함수 만들기

강정우·2022년 10월 11일
0

JavaScript

목록 보기
20/53
post-thumbnail

알파벳 카운터

  • 문제
    영어 문장을 입력받아, 알파벳의 개수를 세어 결과를 출력하는 앱을 만들어봅니다.
const AlphabetCounter = {
  // 변수 초기화
  sentence: "",
  alphabetMap: {},
  
  // sentence 를 인자로 입력받아 AlphabetCounter의 sentence를 세팅
  setSentence: function (sentence) {
    this.sentence = sentence;
    return this;
  },

  // buildAlphabetMap은 AlphabetCounter의 sentence가 가진 각 알파벳의 개수를 세어 알파벳과 그 개수를 각각 키와 값으로 하는 객체를 만들고 
     alphabetMap에 저장
  // this.sentence 로부터 알파벳 맵을 만들어 this.alphabetMap에 저장하세요.
  buildAlphabetMap: function () {
    this.alphabetMap = 
        this.sentence
        .trim()
        .toLowerCase()
        .split("")
        .filter(c => c >= "a" && c <= "z")
        .reduce((map, char) => {
            if(!map[char]) map[char] = 0
            map[char]++
            return map
        }, {})
    return this;
  },

  buildResult: function () {
    // Object.entries()를 활용하여 [a: 1] [b: 2] 형태의 문자열을 만들어보세요.
    const resultString = 
        Object.entries(this.alphabetMap)
            .reduce((acc, [alphabet, freq]) => `${acc} [${alphabet}:${freq}]`, "")
            .trim()

    return `결과는 : ${resultString} 입니다.`;
  },
};

export default AlphabetCounter;

상대시간 표시기

  • 문제
    RelativeTime.diff(date) 는 또 다른 과거 시간 date를 인자로 받아, date와의 시간 차를 상대 시간으로 표시합니다.
// 초를 기준으로 TimeMap을 작성
// 또한 연산을 위해 계산식으로 작성
const TimeMap = (() => {
  let min = 60;
  let hour = min * 60;
  let day = hour * 24;
  let week = day * 7;
  let month = week * 4;
  let year = month * 12;
  return { min, hour, day, week, month, year };
})();

function createTimeText(time, standard, suffix) {
  return `${Math.floor(time / standard)}${suffix} 전`;
}

const TimeTextMap = {
  [TimeMap.min]: '분',
  [TimeMap.hour]: '시간',
  [TimeMap.day]: '일',
  [TimeMap.week]: '주',
  [TimeMap.month]: '개월',
  [TimeMap.year]: '년',
};

const RelativeTime = {
  diff: date => {
    const seconds = (new Date() - date) / 1000;
    return Object.entries(TimeMap).reduce((text, [time, value]) => {
      // time : min, value : 60
      // seconds : 40
      if (seconds >= value)
        return createTimeText(seconds, value, TimeTextMap[value]);
      return text;
    }, '방금 전');
  },
};

export default RelativeTime;

복리 계산기 구현하기

  • 문제
    초기 예금액(principal), 이자율(interest rate), 이자 발생 빈도(frequency), 예치 기간(year)를 유저에게서 입력받아, 예치기간 후의 최종 금액(amount)을 계산합니다.
  • 복리 계산식
    A = P(1 + r / n)^(n*t)
  • 여기서 A는 최종 금액을 의미합니다. P는 초기 금액, r은 이자율, n은 이자 발생 빈도, t는 예치기 간을 의미합니다. 이 식을 이용하여 최종 금액을 계산하여 유저에게 계산 값을 보여주세요.
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글