전체 글 썸네일형 리스트형 이진 탐색 ( + 하한 lower_bound, 상한upper_bound ) 1. 이진 탐색 정렬된 데이터에서 특정 값을 찾는 알고리즘탐색 범위를 반으로 줄여가며 찾기 떄문에 O(lgN) 으로 빠르게 동작한다. 만약 정렬된 데이터에 찾고자하는 수가 중복으로 있다면 가장 왼쪽의 원소를 찾는 방법을 lower bound 라 하며, 가장 오른쪽 원소의 다음 위치를 반환하는 방법을 upper bound라고 한다. 수열 {1, 2, 3, 3, 3, 4} 에서 3의 lower bound는 인덱스 2, uppder bound는 5다. 비슷하게 데이터를 반으로 분할하는 알고리즘으로 분할정복이 있다.하지만 분할정복은 문제를 부분적으로 해결하는 알고리즘으로 탐색이 목적이 아니다. 2. 탐색 과정탐색 범위 low ~ high를 정하고 low 루프에서 탐색 범위가 low > high 될 때까지 범위를.. 더보기 [ 백준 2003 ] 수들의 합 2 https://www.acmicpc.net/problem/2003 풀이 이중루프로 i, j 탐색을 하면 N이 10^5이기 때문에 시간초과에 걸린다. 그래서 누적합 또는 투포인터로 풀면 통과할 수 있다. 1) 누적합 (prefix sum) 누적합으로 풀 수는 있는데 N이 더 컸더라면 누적합으로는 풀 수 없다. long[] pre = new long[N+1]; st = new StringTokenizer(br.readLine()); for(int i = 1 ; i 더보기 OS 부팅과정 1. 전원 ON 컴퓨터의 전원을 켜면 메인보드에 전력이 들어온다. (Power ON) 메인보드에 장착된 장치들(CPU, 메모리, 디스크 등)에도 전력 공급 2. ROM에 저장된 BIOS(Basic Input Output System) 펌웨어 실행 ROM(Read Only Memory)에 저장된 BIOS(Basic Input/Output System)를 읽어들여 실행 ROM(Read Only Memory) 이란 주기억장치(메모리)에는 ROM, RAM 두 종류 존재 ROM은 말 그대로 Read-Only Memory이기 때문에 오직 읽기만 가능 ROM에 저장된 데이터들은 비휘발성이기 때문에 전원 공급이 끊겨도 저장된 데이터들이 사라지지 않음 그렇기 떄문에 전원이 없어도 항상 저장되어야 하는 데이터가 저장 BI.. 더보기 MySQL) 타입 DateTime 과 Timestamp 중 어떤걸 쓸까 토이프로젝트에서 데이터의 생성날짜, 수정날짜 컬럼을 추가하던 중 시간 데이터 타입으로 어떤걸 쓸지 고민하다 간단히 정리 날짜와 시간을 표현하는 타입 MySQL에서는 날짜와 시간을 표현하는 데 여러 가지 타입을 제공 DATE: YYYY-MM-DD 형식으로 날짜만 표현, datetime에서 date만 뽑아낸 것 (Extract the date part of a date or datetime expression) DATETIME: YYYY-MM-DD HH:MM:SS 형식으로 날짜와 시간을 표현 TIMESTAMP: YYYY-MM-DD HH:MM:SS 형식으로 날짜와 시간을 표현하며, 자동으로 값이 업데이트 TIME: HH:MM:SS 형식으로 시간만 표현 YEAR: YYYY 형식으로 년도만 표현 날짜와 시간에 관.. 더보기 Annotation 정리 annotation이란 주석이라는 뜻으로, 코드에 다른 프로그램을 위한 미리 약속된 형식으로 포함 즉 다른 프로그램을 위한 메타 데이터 프로그래밍 언어에 영향이 없다. 다른 프로그램에 유용한 정보를 제공한다. 자바 5부터 제공 annotation 예시 - @Override @Override는 컴파일러에게 부모 클래스의 메서드를 오버라이드 했다는 것을 알려준다. 그렇기 때문에 실행 전 오류를 알 수 있다. 또한 코드에서 명시적으로 상속 메서드가 무엇인지 쉽게 파악할 수 있다. public class Parent { public int calculate(int a, int b) { return a + b; } } public class Child extends Parent { @Override public .. 더보기 MySQL auto_increment와 innodb_autoinc_lock_mode auto increment을 처음봤을 때 이름 그대로 키 값을 알아서 자동으로 올려주는 기능으로만 생각했다. 그런데 막상 사용하려니 동시 요청에 대해 auto increment는 어떻게 대처하는지 원리를 이해못했다. 여기저기 찾아보니 알아둬야 할 내용들이라 생각하여 정리한다 AUTO INCREMENT란 AUTO_INCREMENT 속성을 사용하여 새로운 행에 unique ID 생성 중복되지 않기 때문에 PK에 AUTO_INCREMENT를 많이 설정한다. CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('d.. 더보기 mysql INFORMATION_SCHEMA 업데이트 속도 결론 MySQL 8.0 부터 INFORMATION_SCHEMA의 변경 정보는 24시간에 1번 반영된다. 상황 mysql AUTO_INCREMENT 관련 문서에서 sql문을 테스트하던 중 INFORMATION_SCHEMA의 auto_increment 값이 바뀌지 않았다. ALTER TABLE '테이블A' AUTO_INCREMENT = 1; 위와 같이 변경 후 INFORMATION_SCHEMA에서 조회해보니 AUTO_INCREMENT값이 변경되지 않았다. 하지만 '테이블A'에 값을 넣으면 변경된 auto_increment 값이 들어가는 것을 확인할 수 있었다. 이유는 INFORMATION_SCHEMA의 업데이트 속도는 24시간에 1번 반영된다는 것을 알게 되었다. 왜 INFORMATION_SCHEMA 데이터.. 더보기 투 포인터 투 포인터 배열에서 이중 for 문으로 O(N^2) 에 처리되는 작업을 2개 포인터의 움직임으로 O(N) 으로 해결하는 알고리즘 리스트에 순차적으로 접근해야 할 때 2개 점의 위치를 기록하며 처리 이 포인터는 c의 포인터가 아닌 가리키는 역할 머지소트에서 정렬되어 있는 두 리스트의 병합의 기초가 되기도 함. 정렬된 2개 리스트를 포인터를 이용해서 하나의 정렬된 리스트 완성 투 포인터는 블로그 설명들을 보면 구현이 조금씩 다양한 것을 알 수 있는데, 이는 포인터와 구간에 대한 문제정의를 맞게 했으면 구현을 어떻게 했던지 간에 풀 수 있는 것을 알 수 있다. 초기 단계 2개 포인터는 리스트에서 시작 s, 끝 e 를 의미 s와 e는 첫 번째 원소를 가리킴 초기에 s와 e가 동일 원소를 가리키기 때문에 문제에 .. 더보기 이전 1 2 3 4 5 6 7 ··· 16 다음