프로그래머스 1단계들을 다 풀어간다. 사실 뒷부분으로 갈수록 너무 쉬워지고 있다. 빨리 스프링 프로젝트가 끝나고 알고리즘 학습을 하고 싶다. 1. array를 복사할때는 객체와 같아서 그냥 변수에 넣어 주면 안된다. 1) Arrays.copyOf() 사용 2) System.arraycopy() 사용 3) arr.clone() 사용 (2차원 배열에서도 사용) 2. 정수인지 유리수인지 판별하기 위해서 num % 1 == 0 을 사용 할 수 있음. ex ) 제곱수인지 판별 : Math.sqrt(num) % 1 == 0 ? "제곱수" : "제곱수아님" 3. 2차원 배열 (Matrix)에서, arr이 2차원 배열이라고 할때, arr.length 하면 element의 개수가 아니라 row의 개수가 나온다. arr[..
1. List (arrayList)를 int 배열로 변경하는 방법 list.stream().mapToInt(Integer::intValue).toArray(); Integer배열을 int로 바꿔주는것은 stream을 이용해야한다. 2. List (arrayList)를 String 배열로 변경하는 방법 // list를 string array로 바꾸는 두가지 방법. 1. stream.toArray(Sting[]::new) 2. list.toArray(new String[0]); String[] strings = stringList.toArray(new String[0]); String[] strings2 = stringList.stream().toArray(String[]::new); 위 코드에서 좀 이상한..
라이브러리 (Library) : 책. 다른 사람이 미리 만들어 놓은 것을 가져다 쓰기만 하면 됨. 기능만 제공하는 것. 프레임워크 (Framework) : 라이브러리 + 정형화된 체계적인 프로그래밍 방식. 표준화된 프로그래밍 방식. 생산성과 유지보수에 뛰어나다. 컬렉션 프레임워크는 다수의 데이터를 다루기 위해 다양하고 풍부한 클래스들을 제공한다. 1. 컬렉션 프레임워크의 핵심 인터페이스 (0) Collection 인터페이스 : 컬렉션 클래스에 저장된 데이터를 읽고 추가하고 삭제하는 등 컬렉션 다루는데 가장 기본적인 메소드 정의. (1) Collection 인터페이스의 List 인터페이스 : List와 Set을 구현한 클래스들은 서로 많은 공통 부분이 있어서 공통 부분을 다시 뽑아 Collection 인터..
Boyer-Moore법은 브루트 포스법을 개선한 KMP법 보다 효율이 더 우수하기 때문에 실제로 문자열 검색에 널리 사용되는 알고리즘이다. R.S Boyer과 J.S Moore가 만든 Boyer-Moore법은 KMP법보다 효율이 더 좋은데, 원리는 텍스트와 패턴을 비교할때, 패턴의 마지막 문자부터 앞으로 검사를 진행하며, 일치하지 않는 문자가 있으면 미리 준비한 Skip table 에 따라서 패턴을 옮길 크기를 정하는 것이다. Boyer-Moore 법은 두 접근 방식의 결합이다. (1) Bad Character Heuristic (2) Good Suffix Heuristic 위 두 방법은 텍스트에서 패턴을 찾는데 있어 독립적으로 사용될 수 있다. 두 독립적인 접근 방법이 어떻게 Boyer Moore알고리..
1. KMP알고리즘이란 문자열 검색 알고리즘을 지난번 브루트 포스 알고리즘으로 하나하나 반복해서 검색하는 것을 알아보았었다. M개의 문자열(text)에서, N문자열(pattern)이 어디에 포함되어 있는지를 검색하기 위해서, text를 돌면서 pattern과 일치하는 지를 하나하나 검색했었다. 따라서 시간복잡도는 O(MN)이였다. 이를 O(M+N)의 시간 복잡도로 줄일 수 있는 방법이 바로 KMP 알고리즘이다. Knuth, Morris, Pratt 세 사람이 거의 같은 시기에 고안했기 때문에 이들의 이름 앞 글자를 각각 따서 KMP 법이라고 부른다. 그럼 KMP 알고리즘은 어떻게 문자열 검색을 하기에 시간복잡도를 O(N+M)으로 낮출 수 있을까 2. KMP알고리즘을 이해 하기에 앞서 알아야 하는것 (1)..
어떻게 DBMS가 SQL 쿼리를 실행하는지에 대해서 알아 볼 것이다. 어떻게 '인덱스'라는 것으로 쿼리를 최적화 하는지를 다룰 것이다. 1. 인덱스(Index)란 무엇인가 - 인덱스란 DBMS나 SQL을 사용하는 툴이 제공하는 피처이다. 이 인덱스를 통해서 쿼리의 속도와 성능을 증가 시킬 수 있다. WHERE문을 사용하여 조건에 해당하는 것을 쿼리할 때, 인덱스가 이 검색하는 것을 도와주는 역할을 한다. WHERE문이 없는 쿼리는 테이블 전체를 가져 오기 때문에 더 빠르게 하지 않는다. 위의 그림에서 볼 수 있듯, WHERE + 조건을 통해서 쿼리 할 때, 테이블의 모든 row를 기준에 맞는지 검색해야 하는데, entry가 많고 큰 테이블일 경우 이 모든 row를 검색하는 것이 매우 느리고 비효율적이 될..
이 글에서 다룰 내용은 다음과 같다. 1. Data normalization을 이해한다. (테이블을 어떻게 나누어야 하는지) 2. INNER JOIN, LEFT JOIN 등으로 데이터를 결합하는 방법 3. Data relationships의 타입들 (One-to-One, One-to-Many, Many-to-Many) 데이터베이스에서 데이터는 Key를 통해서 연결된다. 한 테이블의 primary key가 다른 테이블의 foreign key로 사용된다. Primary key와 foreign key를 통해서 테이블간의 관계를 형성 하는 방식이 전형적인 SQL 세계에서 connection을 형성하는 방법이다. 모든 테이블은 최대한 하나의 Primary key를 가질수 있지만 모든 테이블은 여러개의 Foreig..
오늘 백준 Brute-force 알고리즘에 관련한 문제를 풀다 한번 정리 하고 싶다는 생각이 들어 글을 작성한다. 아래 글은 reference에도 남기겠지만, 'Do it! 자료구조와 함께 배우는 알고리즘 입문'을 정리한 글이다. 1. 브루트-포스(Brute-force)법 완전탐색 알고리즘이다. 모든 경우의 수를 탐색하면서, 요구 조건에 충족되는 결과만을 가져 온다. 선형 검색을 확장한 알고리즘이다. 예시로 문자열을 검색하는 알고리즘을 들어 보자. 문자열에 특정 문자열이 들어 있는지 조사하고, 들어 있따면 그 위치 index 값을 반환하는 프로그램을 작성한다 생각해보자. 텍스트 "ABABCDEFGHA"에서 패턴 "ABC"를 브루트포스법을 이용해 검색하는 순서는 다음과 같다. (1) 문자열의 첫 문자 'A..
- Total
- Today
- Yesterday