분류 전체보기 243

[JUnit] JUnit이란

단위 테스트란? 단위 테스트(Unit Test)는 프로그램의 기본 단위인 모듈(Module)을 테스트하는 것이다. 구현 단계에서 각 모듈의 개발을 완료한 후 명세서의 내용대로 정확히 구현되었는지를 테스트하는 것이다. 테스트가 가능한 최소 단위로 나눠서 테스트를 수행하며 개발 수명주기(Development LifeCycle)의 정황과 시스템에 의존적이면서도 시스템의 다른 부분에서 격리하여 독립적으로 수행해야 하는 테스트이다. 단위테스트를 하기 위해서는 가짜 프로그램, 객체(Mock Object)를 만들어서 활용할 수 있으며, 정교하게 테스트 하기 위해서는 테스트 케이스(Test Case) 작성은 필수라 할 수 있다. 종류 : JUnit(Java), DBUnit(DB), CppUnit(C++), NUnit(..

Java&Web 2020.12.18

[Apache] Apache와 Tomcat 연동하기

[Network] Web Server와 WAS [Network] Web Server와 WAS Web Server란? 개념 하드웨어적 의미로는 Web Server가 설치되어 있는 컴퓨터 소프트웨어적 의미로는 클라이언트의 요청을 받아 정적 컨텐츠(image, html, css, javascript 등)를 제공하는 서버 기능 HTTP 프로 minkwon4.tistory.com Apache와 Tomcat의 연동 Web Server인 Apache와 WAS인 Tomcat의 연동에는 다음과 같은 3가지 방식이 있다. 연결 방식 장점 단점 mod_jk - Tomcat Connector를 사용하는 방식 - 가장 많이 사용해온 방식 - mod_jk 관련 자료가 많음 - JKMount 옵션을 이용하면 URL이나 컨텐츠 별로..

Java&Web 2020.12.17

[WEB] Web Server와 WAS

Web Server란? 개념 하드웨어적 의미로는 Web Server가 설치되어 있는 컴퓨터 소프트웨어적 의미로는 클라이언트의 요청을 받아 정적 컨텐츠(image, html, css, javascript 등)를 제공하는 서버 기능 HTTP 프로토콜을 기반으로 하여 클라이언트 요청에 따라 서비스를 담당 클라이언트의 요청이 정적 컨텐츠라면 그에 맞는 정적 컨텐츠를 클라이언트에게 응답 클라이언트의 요청이 정적 컨텐츠가 아니라면 WAS에게 요청을 전달 및 WAS의 응답을 클라이언트에게 전달 컨텐츠 압축 HTTPS 지원 Web Server 메모리 캐시 종류 : Apache Web Server, Nginx, IIS(Microsoft), Google Web Server WAS란? 개념 Web Appliaciton Se..

Java&Web 2020.12.17

[Programmers] 가사 검색

이 문제는 Trie를 사용하는 문제이다. words라는 배열을 통해 단어들이 주어지고 거기에서 quries에 해당하는 것을 찾는 것을 보고, Trie 알고리즘 이라는 것을 깨닫게 되었다. 다만 이문제에서는 주의할점이 있다. 효율성을 따지기에 일반적인 Trie로는 시간초과가 생기고 만일 문자 '?'를 만나게 된다면 그즉시 단어의 갯수를 리턴해주는 방식을 사용해야했다. 그리하여 Node 클래스에 멤버변수로 count 라는 함수를 만들어주었고, insert과정에서 위치마다 count를 늘려주었다. 또한 '?'가 붙는 방법이 두가지가 있는데 앞쪽에 붙어 단어를 형성하는 fro?? 같은 것이 있고, 뒤쪽에 붙어 단어를 형성하는 ????o 같은 것이 있다. fro?? 같은 경우는 count를 쉽게 리턴해줄 수 있지..

Algorithm 2020.09.15

[BOJ] 9202. Boggle

Trie와 백트래킹을 이용한 시뮬레이션 문제이다. 이 문제를 맨처음 보았을 때 일종의 사전 개념인 처음 5개의 입력을 보고 Trie 알고리즘을 사용할 생각을 하였다. 그리고 map이 4x4로써 크지 않고, 주어진 시간도 10초로 충분하여서 백트래킹을 통해 만들어질수 있는 모든 단어에 대해 Trie search를 해주는 방식으로 접근하였다. 여러가지 알고리즘이 혼합되어 있는 형태이기때문에 작은 실수만 해도 어려워 질수 있었던 문제였다. Trie와 다른 알고리즘을 같이 사용해볼 수 있던 좋은 문제였던 것 같다. 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 ..

Algorithm 2020.09.12

[BOJ] 5052. 전화번호 목록

Trie 알고리즘을 이용한 문자열 문제였다. 이 문제는 노드들이 트리구조로 이루어져있는 Trie알고리즘을 사용한다면 쉽게 풀 수 있었던 문제였다. 입력받을 숫자의 문자열을 정렬을 한후 insert과정에서 말단노드를 만나게 된다면 거짓을 리턴해주는 방식으로 풀었다. Trie 알고리즘은 처음 사용해보았는데 Node 클래스를 만들어서 구현하였다. Node는 멤버변수로 말단 노드를 체크해줄 isEnd와 0부터9까지의 자식노드를 가지게 구현하였다. 그 후 root를 기준점으로 하였고, 문자열의 문자 단위로 자식 노드를 따라가면서 저장할 수 있도록 구현하였다. 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 ..

Algorithm 2020.09.10

[BOJ] 1744. 수 묶기

그리디 하게 접근하여 풀수있는 문제였다. 처음엔 문제를 간단하게 생각하여 내림차순으로 정렬후 두개씩 묶는 방법으로 접근하였는데, 잘 생각해보니 음수에 대해선 오름차순으로 처리하는게 최대값을 출력할 수 있는 것을 알게되었다. 따라서 음수, 양수에 대한 pq를 따로 나누었고, 각 각의 pq에 대해서 2개씩 묶는 방식으로 처리해주었다. 또, 0에 대해서 음수가 홀수개수인경우에 대해서도 예외처리를 해주어야한다. 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60..

Algorithm 2020.09.08

[BOJ] 1541. 잃어버린 괄호

이문제는 그리디를 이용하여 풀수있다. 문제를 풀기위해 여러가지 방법을 생각해보았다. +와 -에 대해 우선순위를 주는 방법도 생각해보았는데 구현이 생각보다 쉽지 않았다. 결론적으로 이 문제는 -를 기준으로 - 사이에있는 +와 숫자는 모두 연산해줘도 되는 문제였다. 그래서 우선 -를 기준으로 다 나누고, 모든 연산을 해주었다. 그 이후 맨앞에 것을 제외하고 모두음수로 만들어줄수있는 구성을 만들고 모두 더해주어서 풀 수 있었다. 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 package study5; import java.io.BufferedReader; i..

Algorithm 2020.09.05

[Programmers] 방금그곡

2018 카카오 블라인드 채용 문제이다. 이문제는 문자열 찾기문제로 KMP를 사용하여 풀었다. 하지만 전처리를 해줘야할것이 많았다. 나는 일단 #을 처리하리 위해 translate라는 함수를 만들어 #이 붙은 문자들을 새로운 문자로 아예바꾸어서 문제를 해결하였다. 꼼꼼한 전처리와 KMP를 다룰 줄 알면 쉬운 문제였다. 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 ..

Algorithm 2020.09.04

[BOJ] 1786. 찾기

이문제는 문자열 패턴찾기 문제이다. 단순히 일반적으로 찾으면 시간초과가 생겨서 풀수 없는 문제이다. 그렇기에 대표적인 문자열 알고리즘의 대표적인 KMP를 사용하였다. KMP의 알고리즘의 간단한 원리는 일단 패턴문자열에 대해 해당 문자열의 위치마다에서 접두사와 접미사가 최대로 같아지는 것을 카운팅해주는 배열을 만든다음, 그 배열을 이용하여 접두사와 접미사를 확인해가며 일정간격을 건너뛰어 시간복잡도가 거의 O(n)에 가깝도록 해결하는 방식이다. 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 42 43 44 45 46 47 48 49 50 51 52 53..

Algorithm 2020.09.04