전체 글
-
백준 9012번 괄호 문제 풀이 Stack 활용 ( Java )Problem Solving/Java 2019. 9. 5. 11:03
9012번: 괄호 문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 4..
-
백준 9093 단어 뒤집기 문제 풀이 Stack 활용 ( Java )Problem Solving/Java 2019. 9. 4. 23:45
9093번: 단어 뒤집기 문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다. 출력 각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ..
-
스택에 대해 알아보자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..
-
알고리즘 문제를 풀 때 가장 좋은 입출력 방법은? (C, C++, Java )Problem Solving/Know-how 2019. 9. 4. 17:06
- C 입력 : scanf 출력 : printf - C++ 입력 : scanf (단 ios_base::sync_with_stdio(false); 와 cin.tie(NULL) 을 사용하면 cin 이 빠르다. 하지만 이럴 경우 stdio의 함수들은 사용할 수 없다) 출력 : printf (단 ios_base::sync_with_stdio(false); 를 사용하고 줄바꿈을 '\n'으로 처리하면 cout이 더 빠르다 물론 이 때도 stdio 함수들은 사용할 수 없다 ) - Java 입력 : BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); 출력 : BufferedWriter bw =..
-
시간복잡도를 표현하자! 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 ..