반응형

컴퓨터 공학 351

백준 알고리즘 21738 얼음깨기 펭귄 C++ 코드

백준 알고리즘 링크 남극에 펭귄 한 마리와 크기와 모양이 동일한 N 개의 얼음 블록이 있습니다. 펭귄은 N개의 얼음 블록 중 한 곳 위에 서 있습니다. 펭귄이 서있는 얼음 블록 (이하 블록)을 기준으로 다른 블록들이 연결되어 있으며, 각 블록으로 이동할 수 있는 경로는 한 가지만 존재합니다. N개의 얼음 블록 중 M 개의 블록은 지지대 블록으로, 일반 블록들이 무너지지 않도록 지탱해주는 역할을 합니다. 일반 블록들은 지지대 블록이 하나라도 연결되어 있으면 무너지지 않습니다. 또한, 지지대 블록들 사이에 이동을 위해서는 반드시 펭귄이 서있는 블록 (이하 루트 블록)을 거쳐야 합니다. 또한, 루트 블록이 무너지지 않기 위해서는 지지대 블록이 반드시 두개 이상 연결되어 있어야 합니다. 또한, 루트 블록이 무너..

Node.js와 C++의 퀵정렬 속도 비교 (+메모리 할당 개선)

재귀 없는 퀵정렬을 JS와 C++로 구현하면서 수행속도를 측정하고자 하였다. C++은 정수형 타입이더라도 1바이트, 2바이트, 4바이트, 8바이트로 개발자가 선택하여 사용해야 하는 반면, JS는 정수형과 실수형 타입 모두 number로 사용되고 있다. 다만, JS의 경우 ArrayBuffer를 통해 원하는 바이트 크기의 버퍼를 생성할 수 있고, Int32Array() 함수로 해당 버퍼를 래핑하여 배열 원소의 크기를 4바이트로 사용할 수 있다. [기본 배열 사용시] JS에서 1억개 할당 시 기본 배열은 최대 6.8GB의 메모리 공간을 차지하였다. 정렬 시 시간은 13.452초 소요되었다. 메모리 할당 시간은 36.656초 소요되었다. [고정 크기 배열 사용시] JS에서 1억개 할당 시 고정 크기 배열은 4..

Node.js에서 기본 정렬 / 합병정렬 / 퀵정렬 속도 비교

실험환경 값의 범위 : 0~1억 데이터 개수 : 천만개 ~ 3천만개 반복횟수 : 3회 Note : 합병정렬은 기본 배열의 두배 크기로 메모리 공간을 사용합니다. 실험결과 1000만 1500만 2000만 2500만 3000만 기본정렬 4.16초 6.845초 9.142초 11.421초 14.021초 합병정렬 2.632초 3.881초 5.225초 6.589초 8.358초 퀵정렬 2.129초 3.172초 4.261초 5.487초 6.557초 /** INFO: 파라미터 만큼 배열을 생성하고 랜덤값 입력 */ function generateRandomArray(numData){ let arr = new Array(numData).fill(0); for(let i=0;i= high){ //INFO: 한개밖에 없으면 ..

Node.js 이벤트 루프 정리

[용어정의] REPL (Read-Eval-Print Loop) : 단일 사용자의 입력을 취하고 이를 평가 (실행)하고 결과를 사용자에게 반환시키는 단순한 상호작용 컴퓨터 프로그래밍 환경을 말한다. (예: 주피터 노트북) Polling : IT에서 클라이언트가 서버에게 주기적으로 요청을 보내는 방식을 말한다. [개요] 이벤트 루프가 각 단계에 진입하면 해당 단계에 한정된 작업을 수행하고 큐를 모두 소진하거나 콜백의 최대 개수를 실행하면 다음 단계로 넘어간다. [이벤트 루프 단계 요약] 타이머 (timers) : setTimeout()과 setInterval()로 스케줄링한 콜백을 실행한다. 대기콜백 (pending callbacks) : 다음 루프 반복으로 연기된 I/O 콜백들을 실행한다. 준비 (idle..

[요약] 2019년 네이버 검색 서비스에 사용된 MongoDB 시행착오 정리

[동영상 링크] [MongoDB 인덱스] 컬렉션 당 최대 64개의 인덱스만 생성 가능 너무 많은 인덱스를 추가하면 오히려 부작용 발생 모든 인덱스를 메모리에 보관하기 때문에 인덱스가 많아지면 Frequent Swap 발생 그러면 Write Performance 감소함 인덱스가 너무 많으면 쿼리 플래너가 잘못된 인덱스를 선택할 가능성도 높아짐 [인덱스 prefix] 여러 개의 항목에 대해 인덱스를 설정할 수 있음 한 인덱스에 a, b, c 항목을 순서대로 정의하고 나중에 쿼리를 보낼 때, (a), (a,b), (a,b,c)를 조건으로 전달할 수 있음 그러나, (b), (c), (b,c), (a,c)는 조건으로 전달해도 인덱스가 사용되지 않음 단, (a,c)를 전달하면 a에대한 인덱스만 사용됨 [멀티소팅] ..

컴퓨터 공학 2021.04.17

AES 암호화 알고리즘 조사

[참고문헌]AES - 나무위키AES 암호화 알고리즘 - 사나 [용어정의]AES (Advanced Encryption Standard) : 대칭키를 쓰는 블럭 암호이다. [특징]암호화 키는 128, 192, 256의 세 가지 중 하나가 될 수 있으며, 키의 길이에 따라 실행하는 라운드 수가 각각 10, 12, 14 이다. [모드]ECB (Electronic Code Block) : 가장 단순한 모드로, 블록 단위로 순차적으로 암호화 하는 구조이다. 한 개의 블록만 해독되면 나머지 블록도 해독이 되는 단점이 있다. 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 알기 위해 패딩을 해야 한다.CBC (Cipher Block Chaining) : 블록 암호화 운영 모드 중 보안 성이 제일 높은 암호화 방법..

컴퓨터 공학 2021.04.17

2019년 국가 별 개발자 연봉

출처 : IT월드날짜 : 2019.10.14 [영국] 직군최소연봉최대연봉평균웹 개발자2663만원5621만원3743만원소프트웨어 개발자3254만원7248만원4584만원모바일 앱 개발자3255만원7990만원4518만원 [네덜란드]직군최소연봉최대연봉평균웹 개발자3014만원7078만원4687만원소프트웨어 개발자3932만원8520만원6104만원모바일 앱 개발자3932만원8389만원6042만원 [싱가포르] 직군최소연봉최대연봉평균웹 개발자26만원6327만원3123만원소프트웨어 개발자519만원7972만원4489만원모바일 앱 개발자2600만원6240만원4680만원 [아일랜드] 직군최소연봉최대연봉평균웹 개발자3146만원6425만원4397만원소프트웨어 개발자3540만원7343만원4775만원모바일 앱 개발자3671만원9573..

컴퓨터 공학 2021.03.19

윈도우 10 + Visual Studio 2017에서 C++ Boost 1.59.0 버전 설치하기

[개발환경] OS : Windows 10 Pro 디스크 : C 드라이브 SSD 512GB, D 드라이브 HDD 2TB (HDD에 Boost 설치 예정) IDE : Visual Studio 2017 v15.9.29 목표 빌드 비트 : 64비트 Boost 버전 : v1.59.0 [Boost 다운로드] 2020년 11월 현재 Boost 1.59 버전을 사용하고 있으므로 여기에서 해당 버전을 zip 파일로 다운로드 받습니다. D 드라이브에 HDD가 설치되어 있다면 D:\ 경로에 압축파일을 해제합니다. 그러면 D:\boost_1_59_0 폴더 안에 Boost 관련 데이터가 생성됩니다. [Boost 빌드] 버튼을 클릭하여 "x64 Native Tools Command Prompt for VS 2017"을 클릭하여 ..

현재 시간을 filetime, unixtime, 포맷 형식으로 출력하는 프로그램

@용어정리 유닉스 시간 (Unix time) : 1970년 1월 1일 00:00:00 UTC 부터 경과 시간을 초 (또는 밀리초) 로 환산하여 정수로 나타낸 것이다. Node.js의 Date.now() 함수는 밀리초를 나타내기 위해 64비트를 사용한다. 파일타임 (Filetime) : 윈도우가 지원하는 시간 포맷 중 하나이다. 1000만 분의 1초 단위 (100 나노초)로 표현되며, 1601년 1월 1일을 기준으로 경과한 시간을 표현한다. @본문 현재 시간 또는 현재 시간으로부터 일정 시간 이전/이후의 시간을 유닉스 시간과 파일타임으로 변환하는 프로그램입니다. ./time_printer.exe [unixtime/filetime/format] [현재로부터 시간 차이 (밀리초) (기본값 0)] ./time_..

컴퓨터 공학 2021.02.23

타입스크립트에서 worker_threads 사용 기본 예제

const { threadId, parentPort } = require('worker_threads'); parentPort.on('message', value => { console.log('threadID: ' + threadId); console.log('parent message: ' + value); parentPort.postMessage('World'); parentPort.close(); }); @개발환경 Node v14.13.0 TypeScript v4.0.3 @사전설치 npm install --save ts-node npm install --save typescript main.ts /** * INFO: ts-node와 typescript가 설치되어 있어야 합니다. * npm inst..

컴퓨터 공학 2021.02.23
반응형