본문 바로가기
완주하지 못한 선수 - 프로그래머스 (Java, Level 1) import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; class 완주하지못한선수 { public String solution(String[] participant, String[] completion) { Arrays.sort(participant); Arrays.sort(completion); //두 배열을 정렬하면, 같은 index에서의 요소가 다르다면 해당 participant배열의 요소가 완주하지 못한 참가자 int i = 0; for(i=0; i 2022. 2. 7.
System Call user process가 kernel 영역의 기능을 수행할 수 있게 해주는 programming interface다. 즉, user process가 HW 접근하여 필요한 기능을 수행할 수 있게 해준다. 파일을 읽어오거나, 쓰고, 화면에 메시지를 출력하는 kernel 모드의 기능을 process가 수행할 수 있도록 해주는 것이 System Call의 역할이다. user process가 소프트웨어 인터럽트를 통해 커널의 기능을 이용하기 위한 서비스를 요청하는 하나의 방법 https://limjunho.github.io/2021/05/11/SystemCall.html https://luckyyowu.tistory.com/133 2022. 1. 25.
트리 Binary Search Tree -> AVL Tree -> B Tree (-> B+ Tree) BST의 검색/삽입/삭제 평균 시간복잡도는 O(logN)이다. 데이터 삽입 순서에 따라 tree의 균형이 달라진다. 최악의 경우는 한쪽으로만 쏠려 선형 구조처럼 된 경우이다. 이 때 시간복잡도는 O(logN)이 아닌 O(N)이다. AVL Tree는 BST에서 이러한 상황이 안나오게 삽입, 삭제 시 트리의 균형을 맞춰주는 알고리즘을 추가했다. 이 때문에 검색/삽입/삭제 시간 복잡도는 최악의 상황에도 O(logN)이 되었다. 트리의 성능은 트리의 높이가 낮을수록 높다. 이를 위해서는 하나의 레벨에 더 많은 key를 저장하고, 더 많은 자식노드를 가지면 된다. 이것이 B Tree이다. 하나의 노드는 하나 이상의 k.. 2021. 12. 8.
32bit → 64bit CPU의 레지스터 크기가 달라졌다. 레지스터란 CPU가 내부에서 처리할 명령이나 연산 중간값 등을 일시적으로 저장하는 임시 기억 장소이다. 메모리 중에서 가장 빠른 속도를 가졌다. 즉, CPU가 한 번에 처리할 수 있는 데이터의 크기가 32bit에서 64bit로 커졌다는 의미이다. 게다가 32bit 시스템일 땐 CPU가 인식할 수 있는 최대 램 용량이 4GB뿐이었다. 더 높은 용량의 램을 설치해도 4GB 밖에 활용할 수 없었다. 2^32 = 4,294,967,296 (0~4,294,967,295) 까지의 수를 레지스터가 저장(표현)할 수 있고, 운영체제는 메모리 내부의 주소를 1byte 크기씩 숫자를 매겨 관리하기 때문에 총 4,294,967,295byte(=4GB)만큼의 메모리(RAM)만 CPU가 인식.. 2021. 12. 7.
NFT? http://www.econovill.com/news/articleView.html?idxno=524609 [ER궁금증] NFT가 뭐길래 다들 난리지? - 이코노믹리뷰 [이코노믹리뷰=최진홍 기자] NFT(Non-Fungible Token)가 화제다. 혹자는 디지털 자산 업계의 ‘예술품 개념’이 덧대어졌다는 찬사를 보내는 한편 혹자는 거품이자 허상이며 아무런 의미가 없는 ‘장 www.econovill.com Non-Fungible Token 대체 불가능한 토큰이라는 뜻, 결국엔 DB의 기록이다. 복제가 쉬운 디지털 컨텐츠에 블록체인을 통해 고유값(NFT)을 부여하여 대체 불가능한 컨텐츠로 만드는 방식이다. NFT 자체는 누구나 활용할 수 있지만, 중요한 것은 그 컨텐츠에 얼마나 큰 가치를 부여할 수 있느냐.. 2021. 12. 6.
인덱스 인덱스는 테이블의 특정 열을 특정 자료구조에 맞게 정리한 것으로, I/O 빈도를 줄이고, 해당 자료구조에 맞는 특정 알고리즘으로 데이터를 빠르게 검색하는데 사용한다. 즉, 인덱스의 역할은 검색속도의 향상이다. 인덱스가 없으면 MySQL은 처음부터 끝까지 전체 테이블을 검색한다. (full table scan) DBMS의 인덱스는 레코드의 키 값을 기준으로 항상 정렬되어 있다. 항상 정렬되어 있기 때문에, 주로 SELECT 명령의 검색을 빠르게 하기 위해 사용한다. 테이블에 데이터를 INSERT, UPDATE, DELETE 할 때는 인덱스를 정렬하는 작업도 같이 하기 때문에, 데이터의 변경이 자주 일어나는 테이블에서는 인덱스의 사용을 조심해야 한다. 인덱스의 자료구조는 B-tree(혹은 B+tree) 방식.. 2021. 12. 6.
애플의 M1 프로세서 발표 개발자들이 작성한 코드(C, Java, Python...)가 작동하기 위해서는 컴파일이라는 과정을 거쳐 해당 코드를 기계(CPU)가 이해할 수 있는 언어(기계어)로 번역해야 한다. 각 CPU가 이해할 수 있는 언어가 있다. 이를 ISA(Instruction Set Architecture)라 한다. 대표적인 ISA로는 1. x86, x86-64 - CISC 구조 (Complex Instruction Set Computing) - 인텔, AMD가 사용하는 ISA - 1981년 이후 대세를 차지 후 호환성의 이유로 독주 체제를 유지 2. ARM - RISC 구조 (Reduced Instruction Set Computing) - 칩을 직접 생산하지 않고 기본 설계만 판매 - 각 회사들이 독자적으로 필요에 의해.. 2021. 12. 6.
(Java) 백준 1021 : 회전하는 큐 문제 : https://www.acmicpc.net/problem/1021 풀이 앞, 뒤 양쪽으로 삽입/삭제가 가능한 자료구조인 Deque를 사용하면 좋겠다. Deque인터페이스를 구현하는 ArrayDeque, LinkedList 클래스 중 선택한다. 1. 타겟이 맨 앞으로 올 때까지 이동시킨다. 1.1 왼쪽으로 이동이 빠르다면 첫 번째 요소를 마지막으로 옮긴다. 1.2 오른쪽으로 이동이 빠르다면 마지막 요소를 처음으로 옮긴다. 2. 타겟을 삭제한다. 3. 다음 타겟을 1번부터 반복한다. 공부할 내용 StringTokenizer 기본 사용법 Deque 기본 개념 ArrayDeque vs LinkedList import java.io.BufferedReader; import java.io.IOExcepti.. 2021. 12. 6.
DELETE / TRUNCATE / DROP 비교 DELETE DML WHERE 구를 사용하여 원하는 행을 선택하여 삭제할 수 있고, 사용하지 않으면 테이블 모든 행을 삭제할 수 있다. 내부적으로 한줄씩 제거하는 과정을 거친다. 따라서 쿼리문 처리속도가 느릴 수 있다. 데이터는 삭제하지만 데이터가 있던 storage는 release되지 않고 그대로다. DELETE FROM table1; DELETE FROM table1 WHERE 조건식; ROLLBACK; COMMIT; TRUNCATE DDL 데이터를 전부 삭제하지만, 테이블 정의는 지워지지 않는다. 테이블이 최초 생성되었을 당시로 돌아간다. 즉, 최초 생성 시 storage만 남아있고, 데이터가 있던 stroage는 release 된다. TRUNCATE TABLE table1; DROP DML 테이블.. 2021. 12. 4.
테이블 생성 / 삭제 / 변경 테이블 생성 (CREATE) CREATE TABLE 테이블명 ( 열 정의1, 열 정의2, ... ); 열 정의는 열명 자료형 [DEFAULT 기본값] [NULL | NOT NULL] 형태다. 예) CREATE TABLE sample ( no INTEGER DEFAULT 0 NOT NULL, name VARCHAR(30), date DATE); 기본값은 DEFAULT + 해당 자료형 리터럴로 설정하거나 생략 가능하다. NOT NULL로 지정한 경우만 NULL을 허용하지 않고, NULL을 명시하거나 생략 시 NULL을 허용한다. 테이블 삭제 (DROP) DROP TABLE 테이블명; 여기서 DROP 명령은 테이블 안 데이터는 물론 테이블 정의까지 전부 다 삭제한다. 데이터 삭제 만일 테이블 정의는 그대로 두.. 2021. 12. 4.