Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- grpahQL
- 자바스크립트
- method
- 초보
- 엔퀸즈
- JavaScript
- Instantiation Patterns
- this
- 리액트
- ftech
- JS
- 공부
- nqueens
- underscores
- 개발
- 제일어려워
- array
- 코드스테이츠
- react
- 일상
- DOM
- 클라이언트
- 알고리즘
- 포스기
- 연습
- 코딩
- 취업
- vscode
- 해커톤
- underbar
Archives
- Today
- Total
analogcoding
7/12 - 2주 프로젝트 본문
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