analogcoding

7/12 - 2주 프로젝트 본문

Be well coding/In Immersive

7/12 - 2주 프로젝트

be well 2019. 7. 13. 18:58

Toy 25번 문제 . HashTable 해싱한 키를 인덱스로해서 찾고 삭제하고 검색한 것을 구현 성공.

 

var makeHashTable = function() {
  var result = {};
  var storage = [];
  var storageLimit = 1000;

  result.insert = function(key, value) {
    let index = getIndexBelowMaxForKey(key, storageLimit);
    // 인덱스는 저장할 key를 storageLimit범위의 값으로 해싱한 수
    if (storage[index] === undefined) {
      storage[index] = [[key, value]];
      // 2중배열인 이유 = linked list 형식으로 저장
    }
    // 해시테이블에 저장이 안되어있는 경우 저장!
    else {
      // 이미 다른키가 있는 경우
      let alreadyInserted = false;
      for (let i = 0; i < storage[index].length; i++) {
        if (storage[index][i][0] === key) {
          storage[index][i][1] = value;
          alreadyInserted = true;
        }
        // 값 수정하기
      }
      if (alreadyInserted === false) {
        storage[index].push([key, value]);
      }
      // 해싱한 키가 같은 경우 value 배열에 인자로 추가
    }
  };


  result.retrieve = function(key) {
    let index = getIndexBelowMaxForKey(key, storageLimit);
    if (storage[index] === undefined) {
      // 검색해서 없으면 언디파인드
      return undefined;
    } else {
      if (storage[index].length === 1 && storage[index][0][0] === key) {
        return storage[index][0][1];
      }
      // 검색했는데 하나면 바로 걔 리턴
      else {
        for (let i = 0; i < storage[index].length; i++) {
          if (storage[index][i][0] === key) {
            // 여러개면 i 다 보면서 맞는애 리턴
            return storage[index][i][1];
          }
        }
      }
    }
  };

 
  result.remove = function(key) {
    let index = getIndexBelowMaxForKey(key, storageLimit);
    if (storage[index].length === 1 && storage[index][0][0] === key) {
      // 저장된 값이 하나이고 삭제할 키가 맞다면 삭제
      delete storage[index];
    } else {
      // 저장된 값이 그 이상이면 안에서 키를 검색해서 삭제
      for (let i = 0; i < storage[index]; i++) {
        if (storage[index][i][0] === key) {
          delete storage[index][i];
        }
      }
    }
  };


var makeHashTable = function(){
// This is a "hashing function". You don't need to worry about it, just use it
// to turn any string into an integer that is well-distributed between
// 0 and max - 1
var getIndexBelowMaxForKey = function(str, max){
var getIndexBelowMaxForKey = function(str, max) {
  var hash = 0;
  for (var i = 0; i < str.length; i++) {
    hash = (hash<<5) + hash + str.charCodeAt(i);
    hash = (hash << 5) + hash + str.charCodeAt(i);
    hash = hash & hash; // Convert to 32bit integer
    hash = Math.abs(hash);
  }
return result;

프로젝트 진행

 

홈화면 제작

 

사용자의 onpress 마다 UI 변경 . onpress 이벤트 발생 시 state 를 변경 , UI 바뀌는 부분마다 state 에 따라서 render 되는 로직.

 


 

네비게이션 사용

 

기본 리액트와 다르게 screen 단위로 이동할 때 stack 식으로 이전 screen 으로 이동하거나 넘어갈 때 남아있게 할 수 있는 

Stack navigaitor 를 사용했다.

createStackNavigator, createAppContainer 를 import 하고

 

createStackNavigator 안에서 이동할 screen 들을 명시해준다. 

 

{ initialRouteName: "SignIn", headerMode: "none" }  : render 시에 가장 먼저 띄워질 화면 생성.

 

그 후 자식 Component 처럼 사용한다.

 


외부 라이브러리 사용

 

Alert 가 너무 투박해서 조금 예쁜? Alert 를 찾아보다가 발견한 라이브러리인 awesome-alerts".

재밌던 점은 기본 component 처럼 위치하지만 Alert 에 위치한 버튼을 누를 때 state 를 변경해서 보이게 하거나 숨길 수 있게 관리한다.

 

 

'Be well coding > In Immersive' 카테고리의 다른 글

7/15 - 2주 프로젝트  (0) 2019.07.16
7/13 - 2주 프로젝트  (0) 2019.07.13
7/11 - 2주 프로젝트  (0) 2019.07.11
7/10 - 2주 프로젝트  (0) 2019.07.10
7/9 - 2주 프로젝트  (0) 2019.07.10
Comments