1일차: 시간복잡도 + 해시 1. 시간복잡도 계산법반복문이 몇 번 도는지 센다. 중첩이면 곱하고, 나란히면 더한다. 가장 큰 항만 남긴다.매번 절반(또는 2배)으로 변하면 log N.상수배는 Big-O에서 버린다. (2N과 3N은 둘 다 O(N))기준: 1초 ≈ 1억 연산. N=10⁵에서 N²(10¹⁰)은 불가, N log N은 가능.for (int i = 1; i 2. C++ 함정: size()와 unsignedvector v = {1,2,3};cout size()는 size_t(부호 없는 정수)를 반환한다.타입이 다르면 컴파일러가 한쪽으로 맞춘 뒤 계산한다. unsigned가 한쪽이라도 섞이면 signed가 unsigned로 끌려간다.unsigned 언더플로는 2⁶⁴을 더해 보정되는 정의된 동작이다..
1. 이터레이터이터레이터란 컨테이너에 저장되어 있는 요소의 주소를 가리키는 객체로, 포인터를 일반화한 것이다.vector, map 등 각각 다르게 구현된 컨테이너들을 일반화된 이터레이터를 통해 쉽게 순회할 수 있게 만든 것이다. 컨테이너의 데이터를 순회하려면 주소를 알아야 한다. 이 주소를 가리키는 개체가 이터레이터이다. 1.1 주소값 가져오기c++의 cout은 int, string, 혹은 포인터 타입에 대해서는 vector::iterator타입에 대해서는 #include using namespace std;vector v;int main(){ for(int i = 1; i 이렇게 iterator에 직접 접근해서 출력하면 오류가 난다.이럴 땐 역참조 연산자 *를 이용하여 값으로 돌아가 주고, 다시..
0. 들어가기 알고리즘 공부를 위해 오랜만에 c++을 다시 보고 있다.그러다 printf에서 이상한 점을 보았는데, printf는 정수 %d처럼 %s로 형식을 지정하여 문장을 출력할 수 있다.하지만 변수 자리에 string을 그냥 넣으면 실행 시 에러가 난다. 왜 그럴까? 1. string 인식이 안 되는 이유 - C언어: string이 뭔데?printf는 C++에서 생긴 것이 아니다. C에서 왔다.하지만 string 클래스는 C++에서 새로 생겼다.그래서 printf는 자기가 만들어질 때 없었던 string을 인식하지 못하는 것이다. 2. 해결법: C의 법을 따르자해결법이 무엇일까?이유를 알았으니 해결법을 생각해 보자.C언어에서 문자열은 무엇이었지? 문자의 배열이었다!printf가 %s를 처리할 때..
0. 들어가기필자는 개인적으로 공부를 할 때, 특히 개발을 공부할 때는 이름이 가장 중요하다고 생각한다. 많은 경우 이름에 핵심 개념이 들어있기 때문이다. JPA를 공부하면 가장 먼저 나오는 생소한 개념으로는 EntityManager가 있다.em.persist(entity) 이런 식으로 엔티티를 처음 저장할 때 entityManager를 사용해보게 되는데, entityManager란 무엇일까?또, EntityManagerFactory는 또 무엇일까?그리고, 왜 factory(공장)이라는 이름이 붙었을까? 쉽고 빠르게 정리해 보자. 1. EntityManagerFactoryEntityManagerFactory는 데이터베이스와 연결하기 위한 모든 무거운 설정(DB접속 URL, 유저 아이디, 비밀번호, di..
0. 들어가기JdbcTemplate을 공부하던 중, DI를 위한 리포지토리 생성자를 만들다가 문득 익숙하게 사용하던 패턴이 눈에 걸렸다.public JdbcTemplateItemRepositoryV3(DataSource dataSource) { this.template = new NamedParameterJdbcTemplate(dataSource); this.jdbcInsert = new SimpleJdbcInsert(dataSource) .withTableName("item") // 바로 이 부분 .usingGeneratedKeyColumns("id"); // .으로 계속 이어서 쓸 수 있다} 많이들 쓰는 StringBuil..