목록분류 전체보기 (113)
고코딩
이진탐색 이진 탐색이란 정렬되어 있는 배열에서 원하는 값을 찾아내는 탐색 방법중 하나이다. 이진탐색은 처음부터 찾는 것이 아니라 양 끝에서 부터 시작해 중간값과 찾으려는 값을 비교해서 배열을 2개로 나눠 찾으려는 값이 속한 배열에서 다시 이진탐색을 하는 방법이다. 처음부터 찾는 일반 탐색과 속도측면에서 매우 빠른 방법이다. 가장 주의해야 할 점은 이 탐색은 정렬된 배열에서 써야하는 것이다. 배열에서 찾으려는 값의 인덱스 번호를 리턴해주는 함수이다. 만약에 찾는 값이 없다면 -1을 리턴함 public int binary_search(int item, int[] numbers) { int left=0; int right = numbers.length-1; while(right >= left) { int mi..
문제 크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게 이동할 수 있다. 두 칸이 인접하다는 것은 두 칸이 변을 공유하는 경우이다. 목장에 울타리를 설치해 늑대가 양이 있는 칸으로 갈 수 없게 하려고 한다. 늑대는 울타리가 있는 칸으로는 이동할 수 없다. 울타리를 설치해보자. 입력 첫째 줄에 목장의 크기 R, C가 주어진다. 둘째 줄부터 R개의 줄에 목장의 상태가 주어진다. '.'는 빈 칸, 'S'는 양, 'W'는 늑대이다. 출력 늑대가 양이 있는 칸으로 갈 수 없게 할 수 있다면 첫째 줄에 1을 출력하고, 둘째 줄부터..
JNDI란? 회사에서 개발환경을 세팅하다가 JNDI를 설정할 일이 있었다. 처음에는 JNDI가 뭐지? 생각하고 있다가 이것 저것 알아보니 매우 중요한 기술인것을 알고 내 나름대로 정리해본다. JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API다. JNDI는 일반적으로 다음의 용도로 쓰인다: 자바 애플리케이션을 외부 디렉터리 서비스에 연결 (예: 주소 데이터베이스 또는 LDAP 서버) 자바 애플릿이 호스팅 웹 컨테이너가 제공하는 구성 정보를 참고 출처 : 위키백과 간단히 요약하자면 우리가 연결하고 싶은 데이터베이스의 DB Pool을 미리 Naming 시켜주는 방법 중..
카프카에 대해 너무나도 정리를 잘한 블로그 글을 발견해서 링크를 남긴다. 카프카
실시간 웹 통신 방식에 대한 정리 웹 클라이언트에서 정보를 주고받는 방식은 여러가지가 있지만, 그중에서도 실시간 웹 통신은 매우 까다롭게 구성되어 있다. 단순히 서버에 request만 계속 보내게 된다면 서버에 쓸데 없는 부하도 많이 생길 것이고 만약에 매번의 request마다 페이지를 새로 로드해야 한다면 서버에서는 페이지 정보를 매번 클라이언트로 보내야하는 불상사가 발생할 수 있다. 웹은 태생 자체부터 실시간을 위해 필수적인 지속되는 연결(persistence connection)을 가질 수 없다. 클라리언트에서 서버에 접속하면 응답하고 연결이 끊어진다.(HTTP의 특징) 때문에 안타깝게도 현재 웹에서 운용되는 실시간 서비스들은 대부분 실시간이 아니다. (10초 단위 30초 단위 라고 말할 수는 있을..
문제 꿍은 도비에게 영어단어들을 제시한 후 어떤 단어가 대소문자를 구분하지 않고 사전순으로 가장 앞서는지 맞추면 양말을 주어 자유를 얻게해준다고 하였다. 하지만 인성이 좋지 않은 꿍은 사실 그러고 싶지 않았기 때문에 대소문자를 마구 섞어가며 단어들을 제시했다. 예를 들어, apPle은 Bat보다 앞서지만 AnT보다는 뒤에 있는 단어다. 도비에게 희망은 여러분뿐이다! 여러분이 도비에게 자유를 선물해주도록 하자! 입력 각 테스트케이스는 정수 n (2 ≤ n ≤ 1000) 으로 시작하며 주어지는 단어의 개수를 뜻한다. 다음 각 n줄은 길이가 최대 20인 단어가 주어지며 대소문자의 구분을 없앴을 때 똑같은 단어는 주어지지 않는다. 마지막 입력은 0이 주어진다. 입력 출력 3 Cat fat bAt 4 call b..
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제입력 입력 출력 5 5 2 3 4 1 1 2 3 4 5 정답 사실 이 문제는 자바 공부하다가 Collection에서 sort()함수 있길래 사용해 봤다. sort()함수도 결국에는 피벗 정렬을 이용해서 정려을 하는 방식이였다. 이 문제에서 속도를 줄이고 싶으면 피벗 정렬과 BufferedReader BufferedWriter를 사용하면 될것이다. ..
모던 자바 인 액션 이라는 책을 공부하면서 풀었던 스트림 기초 문제 입니다. 기본적으로 Trader Transaction 2가지 클래스가 정의되어 있어야 합니다. Trader public class Trader { private final String name; private final String city; public Trader(String n, String c){ this.name = n; this.city = c; } public String getName() { return name; } public String getCity() { return city; } @Override public String toString() { return "trader:"+this.name+" in "+this..
이 글은 모던 자바 인 액션책 내용을 정리한 내용입니다. 람다 표현식은 무엇일까? 람다 표현식은 메서들 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 익명 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 함수 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. (함수형 프로그래밍이랑 비슷한 특징이다.) 간결성 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 묻지도 따지지도 말고 예제 ..
문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 정답 처음에는 큰수로 나누는게 가장 1에 빨리 도달할것이라고 생각하였다. 근데 아닌 경우가 생겼다. 10에서 예외 케이스가 발생했다. 10/2 => 5-1 => 4/2 => 2/2 => 1 로 4번으로 구할 수도 있지만 10-1 => 9/3 => 3/3 => 1 로 3번 ..
브루트 포스(Brute Force) 알고리즘에서의 브루트 포스(Breute Force)에 관한 이야기 이다 공격기법 부르트 포스에 대한 이야기가 아니다. Brute Force Attack Brute : 난폭한 / Force : 힘 두 의미를 합하면 난폭한 힘(?)으로 해석이 된다. 간단히 설명하자면 무식하게 모든 경우의 수를 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 일명 노가다... 이 알고리즘의 가장 큰 특징은 모든 영역을 전체 탐색하는 방법이다. 전체 탐색하는 방법으로는 선형 구조를 전체적으로 탐색하는 순차 탐색, 비선형 구조를 전체적으로 탐색하는 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 가 기본적인 도구이다. 어떤 방식으로든 전체 탐색으로 문제를 해결한다면 브루트 포스 알고리즘으..
Swagger? 스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태걔의 지원을 받는 오픈 소스 스프트웨어 프레임워크입니다. 현재 진행하고 있는 프로젝트에 대해서 유지보수를 진행하거나 API를 만들게 될때 API서버가 어떤 스펙을 가지고 있는지 파악해야 한다. Swagger는 API의 명세와 문서를 대신 작성해 주는 아주 착한 친구 입니다. 스웨거의 공식 사이트입니다. 저 자세한 정보르 알고싶다면 위 링크에 접속해서 알아보시면 될거에요. 여러가지 환경에서 Swagger를 사용가능한데 이 글에서는 Spring Boot + Swagger 세팅을 해볼께요. Spring Boot + Swagger SpringBoot 스펙 JDK 8 Spring B..