1. Stack이란 스택은 데이터를 일시적으로 저장하기 위해 사용하는 자료구조로, 데이터의 입력과 출력 순서는 LIFO(Last In, First Out)이다. 스택에 데이터를 넣는 작업을 push라고 하고, 스택에서 에이터를 꺼내는 작업을 pop이라고 한다. 스택의 가장 윗부분(push와 pop을 하는)을 top이라고 하고, 스택의 가장 아랫부분을 bottom이라고 한다. Stack은 자리 이동이 없고 순차적으로 데이터를 추가하고 삭제하기 때문에 ArrayList와 같은 배열기반의 컬렉션 클래스를 통해 구현하는 것이 적합하다.. (1) Stack의 예시 : 자바 프로그램에서 메소드를 호출하고 실행하는 프로세스 익히 잘 알고 있는 Call stack의 과정이다. void x() {/* ... */} vo..
spring boot는 jar 파일 안에 embeded 된 서버와 application 코드가 들어있어서 별도의 서버연결과 설치가 필요하지 않다. (Self-contained Unit). 먼저, 작성한 소스코드들, 그리고 그렇게 Web 어플리케이션을 만들 수 있는 스텐다드한 구조를 결정하는 것이 Maven이다. 그것을 컴파일 해서 톰캣같은 WAS가 인식하도록 패키징 하는 설정을 pom.xml에 하게 되는데, 그러한 톰캣, Maven archetype, dependency 설정, configuration 설정 등 너무 복잡하고 신경 써야하는 것이 많은 세팅 단계를 간단하게 해 주는 것이 Spring boot이다. 1. WAR 파일과 JAR 파일의 차이점 JAR(Java Archive)의 이름에서도 알 수 ..
1. java.util 패키지의 유용한 클래스 (1) java.util 패키지의 Objects 클래스 (java.lang 패키지의 Object 클래스와 유의) - Math 클래스 처럼 모든 클래스가 static. 객체의 비교나 null check에 유용함. - Objects.isNull(obj)이나 Objects.nonNull(obj) 같이 해당 객체가 null인지 아닌지를 boolean 값으로 반환함. - Objects.requireNonNull()은 해당 객체가 null이 아니여야 하는 경우에 사용. null이면 NPE 발생. Parameter 2개 쓰면 (obj, String예외 메세지) 순으로 예외메세지 설정가능. 아래 처럼 매개변수 null check 유효성 검사시 간단히 가능. import j..
프로그래머스 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)..
- Total
- Today
- Yesterday