Knowledge
-
큐에 대해 알아보자Knowledge/Data Structure 2019. 9. 5. 18:24
- 큐란? 한쪽 끝에서만 자료를 넣고 다른 한쪽 끝에서만 뺄 수 있는 구조 먼저 넣은 것이 가장 먼저 나오기 때문에 FIFO ( First In First Out) 라고도 한다 - 주로 사용하는 메소드 ( Java ) push, pop, front, back, empty, size가 있다고 하는데 그건 C나 C++ 얘기인 것 같고 자바에서 LinkedList로 큐를 구현했을 경우는 - isEmpty() : 비어있는지 확인 - offer() : 큐의 뒤에 값을 입력한다 - poll() : 큐의 가장 앞에 있는 값을 꺼내고 반환한다 - peek() : 큐의 가장 앞에 있는 값을 확인만 한다 - 구현 이 역시도 백준 큐 구현 문제 ( https://www.acmicpc.net/problem/10845 ) 에 ..
-
스택에 대해 알아보자Knowledge/Data Structure 2019. 9. 4. 22:25
- 스택이란? 한쪽 끝 ( 가장 위 - Top )에서만 자료를 넣고 뺄 수 있는 자료구조. 마지막으로 넣은 것이 가장 먼저 나오기 때문에 LIFO ( Last In First Out ) 라고도 한다. - 주로 사용하는 메소드 push: 스택에 자료를 넣는 연산 pop : 스택에서 자료를 빼는 연산 peek: 스택의 가장 위에 있는 자료를 보는 연산 empty: 스택이 비어있는지 아닌지를 알아보는 연산 size: 스택에 저장되어있는 자료의 개수를 알아보는 연산 - 구현 정확한 구현이 아닌 백준 10828번 스택 문제 ( https://www.acmicpc.net/problem/10828 ) 의 조건 push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출..
-
더 빠르게 입력받고 출력해보자 BufferedReader/BufferedWriterKnowledge/Java 2019. 9. 4. 22:11
알고리즘 문제를 풀 때 가장 좋은 입출력 방법은? (C, C++, Java ) ( https://takeknowledge.tistory.com/43 )에도 포스팅했지만 java에서 가장 빠르게 입벽받고 출력할 수 있는 방법은 BufferedReader 와 BufferedWriter를 사용하는거다. 입력 속도 비교 ( https://www.acmicpc.net/blog/view/56 ) 에 따르면 첫째 줄에 정수의 개수 N (= 10,000,000) 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일을 입력받는데 java에서 무언가를 입력받을 때 주로 쓰는 Scanner는 4.8448초가 걸렸지만 BufferedReader, Integer.parseInt 를 활용했을 때는 0.6585..
-
시간복잡도를 표현하자! Big O 표기법Knowledge/Data Structure 2019. 9. 4. 16:42
- 문제의 크기와 조건 알고리즘 문제가 주어졌을 경우 우선 문제의 크기와 조건 고려해야 한다. 예를 들어 '메뉴판에 있는 모든 메뉴를 읽는데 걸리는 시간을 구하라' 라는 문제가 있을 때 메뉴판이 하나뿐이라면 시간은 사람수 N X 메뉴 갯수 M 만큼 걸리겠지만 사람수만큼 메뉴판이 있다고 조건이 바뀌면 메뉴 갯수 M 만큼만 걸릴테니까. 그렇기에 문제가 주어졌을 땐 항상 문제의 크기와 조건을 먼저 보고 방법을 생각해야 한다. - 시간 복잡도 방법을 생각했다면 그 다음 고려해야 할 것은 시간 복잡도이다. 문제 해결 능력을 측정하는 알고리즘 문제 해결에선 특히 시간이 짧을 수록 효율적이라고 본다 그렇기에 문제가 주어졌을 때 떠올린 해결 방법이 최악의 경우 얼마나 시간이 걸릴지를 대문자 O를 사용하는 표기하는 Bi..
-
Java에서 날짜를 편하게 쓰자! LocalDateKnowledge/Java 2019. 9. 4. 11:58
포스팅에 앞서 미리 알리자면 이 포스팅에선 내가 실제 작업하면서 구현한 메소드만 설명할 예정이다. LocalDate에 대해 워낙 잘 정리해놓은 포스팅이 이미 존재하긴 때문 JAVA에서 날짜,시간 제대로 사용하는 LocalDate, LocalTime, LocalDateTime (NTP 시간 서버에서 정확한 시간 받아오기, json object 받기, JPA 테스트 with LocalDateTime) 아직도 Calendar, Date 사용하니? 자바에서 아직도 Calendar.getInstance해서 시간/날짜를 표현하는 프로그래머가 있을까? 처음 공부할 때나 단순하게 표현해야할 때는 사용할 수 있지만 단점이 극명한 클래스라.. jeong-pro.tistory.com 바로 이거다. 완전 갓갓 포스팅.. 여러..
-
로그인 기능은 어떻게 구현할까? 세션에 대해 알아보자Knowledge/Spring 2019. 9. 4. 11:44
클라이언트 별로 다른 정보를 제공하는 기능은 중요하다. 그러나 중요도에 비해(?) 구현은 굉장히 쉽다 일단 Session에 대해 알아보자 - Session 클라이언트 별로 서버에 저장되는 정보를 말한다. - 사용법 (Spring 4.3.5 버전 기준으로 설명함) 일단 HttpSession을 생성해야 한다. 원래는 HttpRequest의 getSessiono()을 받아와서 세션에 저장하는 방식을 따라야 하는데 ( ex. HttpSession session = request.getSession(); ) 4.3.5 버전에서는 (아마 4이상이지 않을까 싶은데) 아래와같이 1 2 3 4 5 6 7 8 @Controller public class ReservationController { public String ..
-
스프링 controller에서 파라미터를 받는 다양한 방법 ( @RequestParam, @RequestBody, @PathVariable)Knowledge/Spring 2019. 9. 4. 11:15
컨트롤러에서 파라미터를 받을 수 있는 다양한 방법이 있다 1. @RequestParam 어노테이션 활용 GET방식으로 넘어온 URI의 queryString을 받기에 적절해 html부터 단계별(?)로 밟아온 사람이라면 가장 쉽게 이해할 수 있을 어노테이션이다. 예를 들어 http://localhost:8080/reservation/api/reservations?reservationEmail=test@naver.com 이런 URI가 있다고 치면 Controller 단에서 1 2 3 4 5 6 7 8 9 10 11 @RestController @RequestMapping(path = "/api") public class ReservationsApiController { // email로 예약 내역 조회 @Ge..
-
데이터 바인딩을 도와주는 handlebars.js 사용법Knowledge/javascript 2019. 8. 26. 23:50
ajax로 가져온 데이터를 동적으로 추가해야 하는 상황은 상당히 자주 발생한다. Handlebars.js는 이런 상황을 좀 더 쉽게 처리할 수 있도록 도와주는 라이브러리.. 라는데 사실 익숙하지 않으면 되려 더 어렵다. 필자도 이번에 처음 써보면서 많이 헤맸는데 헤매면서 알게된, 진작 알았으면 좋았을 만한 것들을 정리해두려 한다. - 기본 사용법 기본사용법은 다음과 같다. 1. 템플레이팅할 html을 세팅한다. 이때 데이터 바인딩 시킬 부분은 {{바인딩시킬 데이터의 프로퍼티명}} 의 형태로 적는다. 2. htmlTemplate을 가져온후 Handlebars로 compile 한다. 3. 컴파일한 템플릿에 데이터를 집어넣는다. 이 때 리턴값은 html로 나온다. 4. 리턴받은 html을 target에 inn..