전체 글

전체 글

    자바스크립트에서 큰 숫자 표현하기 (BigInt, bn.js)

    자바스크립트에서는 숫자를 표현하는데 한계가 있다. Number로 수를 표현할 땐 2^53 - 1 이상의 수를 안정적으로 표현하기 어렵다. 때문에 이보다 큰 숫자를 표현할 때는 BigInt로 표현한다. const num = 123456789; const BigIntNum = BigInt(123456798789); // 또는 BigInt("123456798789"); const BigIntNumN = 123456798456n; console.log(typeof num, typeof BigIntNum,typeof BigIntNumN); // number bigint bigint BigInt와 Number 타입의 계산은 에러가 발생한다. const num = 132; const bigNum = 456n; con..

    자바스크립트에서 배열 섞기 알고리즘 (피셔-예이츠 셔플)

    배열을 랜덤으로 섞어야 하는 알고리즘의 구현을 해보기로 했다. 조사결과 피셔-예이츠 셔플이라는 알고리즘 방법을 알게되었고, 이를 자바스크립트로 구현하기로 하였다. 조건은 다음과 같이 설정하였다. inputs : 임의의 길이를 가진 배열 arr, 임의의 배열 arr의 길이 n output : 임의의 배열 arr이 무작위로 섞인 새로운 배열 shuffledArr 실제 구현은 다음과 같이 하였다. const shuffle = (arr, n) => { const shuffledArr = [...arr]; for(let i = 0; i < n - 1; i++) { // i ≤ < n인 임의의 정수 (최소값이 i, 최대값이 n - 1) const randomIdx = Math.floor(Math.random() *..

    React Native 카메라로 QR code 읽어오기 (react-native-vision-camera)

    리액트 네이티브에서 카메라로 QR Code를 읽어오는 방법에 대해서 기록을 남기고자 한다. 사용한 카메라 라이브러리는 가장 많이 사용되었지만 deprecated된 react-native-camera의 공식문서에서 추천하는 react-native-vision-camera를 사용하였다. 사용한 라이브러리는 다음과 같이 설치할 수 있다. npm i react-native-vision-camera vision-camera-code-scanner react-native-reanimated npx pod-install react-native-reanimated가 사용되었기에 최상단 index.js에서 import 'react-native-reanimated';로 불러온 뒤 babel.config.js를 다음과 같이..

    React Native에서 스타일을 작성하는 여러 방법 (StyleSheet, emotion, tailwind)

    StyleSheet StyleSheet은 react native에서 기본적으로 제공되는 CSS 작성법이다. import React from 'react'; import {View, Text, StyleSheet} from 'react-native'; const Home = () => { return ( Hello World ) } const styles = StyleSheet.create({ container: { flex: 1, padding: 12, backgroundColor: 'gray', }, innerText: { fontSize: 30, }, textColor: { color: "red", } }); export default Home; StyleSheet.create를 통해서 객체를 생성하..

    Interrupt란?

    I/O장치와 CPU는 동시에 작동한다다. CPU, device controllers는 common bus를 통해서 이들이 공유하는 memory로 연결되는데, 이 동시에 실행되는 CUP 및 장치들은 memory cycles를 놓고 경쟁한다. 이때 Device controller는 CPU에게 자신의 작업이 완료되었음을 interrupt 를 발생시킴으로써 알린다. Interrupt의 기능 Interrupt는 interrupt service routine에게 control을 interrupt vector를 통해서 전달한다. interrupt vector는 모든 service routines의 주소를 가지고 있다. interrupt service routine는 데이터를 처리하고, 만약 이에 실패했다면 실패를 대..

    Circuit Switching과 Packet Switching

    access network를 구성하는 방법으로 shared 방법과 dedicated 방법이 있다. 대표적으로 데이터망 등의 Packet switching이 shared 방법이고, 전화망과 같은 circuit switching이 dedicated 방법이다. 우리의 application 소프트웨어가 작동되는 end systems을 host라고 부른다. 그리고 host와 host 사이에 switch나 router, 즉 노드가 존재한다. 이런 network core, host에서 host로 데이터를 전송하기 위해서는 그 사이에 노드와 노드를 연결해야 하는데 그 방법에는 circuit switching과 packet switching이 있다. Circuit Switching circuit switching은 ho..

    프로그래머스 코딩테스트 연습 - 숫자 변환하기 JavaScript

    처음에는 DFS 방법으로 문제에 접근하였다. function solution(x, y, n) { let minTry = 1000000; const dfs = (num, tryCount) => { if(num > y) { return; } else if(num === y) { if(minTry > tryCount) { minTry = tryCount; } return; } dfs(num + n, tryCount + 1); dfs(num * 2, tryCount + 1); dfs(num * 3, tryCount + 1); } dfs(x, 0); return minTry === 1000000 ? -1 : minTry; } 하지만, 시간초과 문제가 발생하였다. 문제를 다시 생각해보니, 최단거리를 찾는 것과 유사..

    자바스크립트 코드 실행시간 측정하기

    가장 먼저, console.time을 이용할 수 있다. console.time과 console.timeEnd 사이의 시간 차이를 출력할 수 있다. 인자로 같은 문자열을 넣으면, 그 사이에서 실행된 코드들이 얼마만큼의 시간동안 실행되었는지 콘솔로 확인할 수 있다. 그 사이에서 console.timeLog를 사용하면 콘솔 코드가 실행된 순간에 시간이 얼마나 지났는지도 확인할 수 있다. const checker = () => { for(let i = 0; i for of > for 순으로 빠른 성능을 보여주었다. 🍭 react native에서는 위의 코드 중에서 performance.now()가 유일하게 작동하였다. JS 벤치마킹 라이브러리로 benchmark를 사용할 수도 있다. https://www.npm..