📌 오늘 한 일

  • Javascript 핸드북 ‘배열’ 복습
  • Spartaflix 혼자 만들기 + firebase 연습
  • 알고리즘 두 문제 풀기

1. Firebase

  • Firebase는 구글이 만든 모바일 및 웹 애플리케이션 개발 플렛폼이다.
  • 개발자들이 백엔드 인프라를 구축하거나 관리하는 복잡한 작업 없이 핵심 기능에만 집중할 수 있도록 도와준다.

2. Cloud Firestore

  • 구글의 클라우드 기반 NoSQL 데이터 베이스이다. NoSQL(비관계형 데이터베이스)는 복잡하거나 유연한 정보를 다룰 때 사용된다. 스타트업에서 사용하기에 적합하다.
  • 데이터 베이스 서비스로 데이터를 저장하고 관리할 수 있는 기능을 제공한다.
    • 컬렉션(Collection): 여러 개의 문서들이 특정한 주제 또는 유형으로 그룹화 되어있다.
    • 문서(Document): 하나의 문서에는 여러개의 필드(Field)로 구성되어 있다.
    • 필드(Field): 문서 안에 있는 데이터의 작은 부분이다. 각 필드는 값으로 구성되어 있다.

🔗 Spartaflix 완성본
🔗 Github 코드


알고리즘 풀기

몫 구하기

문제

정수 num1num2가 매개변수로 주어질 때, 을 로 나눈 몫을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100

입출력 예

num1num2result입출력 예 설명
1052num1이 10, num2가 5이므로 10을 5로 나눈 몫 2를 return 합니다.
723num1이 7, num2가 2이므로 7을 2로 나눈 몫 3을 return 합니다.

💻 코드

function solution(num1, num2) {
    var answer = Math.floor(num1 / num2)
    return answer;
}

결과값에는 소수점이 포함되어 있지 않아 소수점 이하는 버리기 위해 Math.floor()를 사용했다. Math.floor()와 관련된 유사 함수로는 아래와 같은 것들이 있다

  • Math.ceil() : 소수점 이하를 올림한다.
  • Math.round() : 소수점 이하를 반올림한다.
  • parseInt(): 문자열을 정수로 바꾸어 준다. 소수 부분은 버려준다.

최빈값 구하기

문제

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예

arrayresult입출력 예 설명
[1, 2, 3, 3, 3, 4]3[1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
[1, 1, 2, 2]-1[1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
[1]1[1]에는 1만 있으므로 최빈값은 1입니다.

💻 코드

function solution(arr) {
  const obj = {}          // 1) 객체를 생성한다 
  arr.forEach((key) => {  // 2) 매개변수로 들어온 배열을 forEach 반복문을 사용해 배열에 들어있는 요소들을 가져온다
     // 3) 만약 반복문을 이용해서 가져온 배열의 요소가 생성된 'obj'객체에 존재한다면 프로퍼티 value + 1을 하고
			if(obj[key]){          
      obj[key] += 1
    } else {
			// 4) 만약 존재하지 않는 다면 그대로 1로 둔다
      obj[key] = 1
    }
  })
  
  let highestValue = 0;   // 5) 먼저 최빈값 개수는 0으로 초기값을 주고
  let highestValueKey;    // 6) 최빈값 또한 초기값을 비워둔다

    for(let key in obj) {          // 7) for-in 반복문을 이용해 'obj'의 key값을 가져온다
      const value = obj[key]       // 8) 'value'라는 변수를 생성해서 obj value값을 저장해둔다
      if(value > highestValue) {   // 9) 만약 highestValue와 value를 비교해서 value값이 크다면
        highestValue = value;      //    highestValue에 value값을 저장하고
        highestValueKey = key      //    저장된 highestValue의 key값을 highestValueKey에 저장한다
      } else if (value == highestValue){  // 10) 만약 객체 안에 최빈값이 존재하지 않는다면 '-1'을 반환한다
        highestValueKey = -1
      }
    }
    return Number(highestValueKey) // 11) 반환된 결과값이 문자열로 되어 있어 숫자로 바꿔주었다
}

✌️ 오늘의 회고

오늘부터 알고리즘 풀기가 추가되었다. 처음 풀어보는 알고리즘이라 어려웠다. 특히 두번째 문제인 ‘최빈값 구하기’를 푸는데 거의 두시간 넘게 걸렸다. 결국엔 검색을 이용해서 풀었다. 처음에는 이해가 안갔지만 한줄 한줄씩 생각해 보면서 혼자 해석하니까 조금씩 이해가 가기 시작했다. 오늘은 알고리즘 푸는 것에 시간을 너무 많이 썼다. 다음에는 한 시간정도 풀다가 안되면 검색하고 정리하는게 나을것 같다.

0개의 댓글