반응형

Java 79

[Java-Algorithm] 백준 5585 거스름돈 -그리디 알고리즘

최적해를 구하는 데에 사용되는 근사적인 방법, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해나가는 방식이다. 하지만 선택들을 계속 수집해서 최종적인 해답을 얻었을 경우 이 해답이 최적의 답이라는 보장은 없다. 적용이 잘되는 경우 1. Greedy Choice Property (탐욕 선택 조건) 앞의 선택이 이후 선택에 영향을 주지 않는 경우. 즉, 각 사건들이 서로 독립적일 때 잘 맞는다. 2. Optimal Substructure (최적 부분 구조 조건) 문제에 대한 최적해가 부분 문제에 대해서도 최적인 경우 이문제는 쉬운 문제다 그리디가 뭐지? 하는 나도 풀었던 문제 정리.. 문제 : https://www.acmicpc.net/problem/5585 5585번: ..

[Java-Basic] JVM 메모리구조 및 개념

JVM(Java Virtual Machine) 이란? 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체 CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다. JVM은 크게 ClassLoader / Execution Engine / Garbage Collector / Runtime Data Area 로 나뉜다. 각각의 아이들이 무엇을 의미하는지 알아보자.! JVM의 구성 Class Loader Java 소스파일 (.java)를 .class 파일(바이트코드)로 컴파일 한다. 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역..

[Java-Algorithm] Programmers 다리를 지나는 트럭 풀이

아 엄청 헤맨 문제.... 결국 풀이를 보고말았다... 다른분들은 아주 심플하게 푼것같다. 내 나름대로 정리를 해놓으려고 한다. 1). 우선 Class를 따로 빼서 관리할수 있도록 만든다. 무게와 진입시점을 담고있는 아이를 Queue에 넣어서 진행 시킬것! class Truck { int weight; int entry; Truck(int weight, int entry){ this.weight = weight; this.entry = entry; } } 2). 여기서 중요한 부분은 기다리는 Truck Queue와 다리를 지나는 Truck Queue로 구분짓는다. 다리에 진입하는 시점의 시간을 트럭Class객체에 담아 queue에 넣어준다. 트럭의속도는 1임으로 시간이 지날때 지나가는 Queue에 있는 ..

[Java-Algorithm] BFS 넓이 우선탐색 알고리즘이란? 인접리스트

BFS 정의 BFS는 현재 위치에 인접한 모든 위치의 노드를 방문하고, 그 이웃 노드들의 또 다른 이웃 노드들을 방문하는 것은 그 다음에 진행하는 것을 의미. 큐를 이용해서 순환적 형태로 구현하는 것으로 공부해보려고 한다. BFS 넓이 우선 탐색 (Breadth Fisrt Search) "근처부터 확인하자"와 같이 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 알고리즘이다. 시작 정점을 지나고 나면 깊이가 1인 모든 정점을 방문하고, 그다음에는 깊이가 2인 모든 정점을 방문한다. 2..3..4... 이런식으로 나중에는 더 이상 방문할 곳이 없을 때 탐색을 종료 * 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법 * 사용하는 경우:..

[Java-Basic] Reflection API 편리하게 사용하여 Vert.x Verticle 사용하기

Vert.x로 데몬을 만들다가 instance, worker 및 poolsize를 설정하는것을 편리하게 Annotation으로 만들때 사용하려고 찾아보다 알게된 내용. 언제든지 편하게 사용할 수 있을것 같아 기록..! => Reflection API를 편리하게 사용할수 있게 해주는 라이브러리가있다!!! org.reflections reflections 0.9.10 요 라이브러리를 사용하면 아주 편리하게 Annotation에 정해놓은 값들을 꺼내서 사용할 수 있다. 아래는 사용부분 코드 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Verticle { boolean isWorker() default true; ..

[Java-Algorithm] DFS 깊이 우선탐색 알고리즘이란? 인접리스트 그래프

이번에는 코딩테스트에 자주 출몰한다고하는..? DFS 알고리즘을 공부해 보려고한다. 비전공자로 시작한 만큼 하나하나 꾸준하게 나만의 공부를 하는것이 중요하다...! 시간날때마다 어떤것이든 하나씩 공부를 하는 습관을 길들이며... DFS 깊이 우선 탐색 (Depth Fisrt Search) "더 나아갈 길이 보이지 않을 때까지 깊이 들어간다"를 원칙으로 그래프 내의 정점을 방문하는 알고리즘 분기가 여러개가 있을때, 분기별로 끝까지 탐색해보고 이어진 다음 노드가 없을경우 다음분기로 넘어가는 방법이다. 완전 탐색 알고리즘에서 사용한다고 하는데, 자세하게 언제 어떻게 사용하는지는 알고리즘을 공부하고 난뒤 알아보도록 하자! 구현 방법 2가지 1). 순환 호출 이용(재귀) 2). 명시적인 스택 사용 - 인접한 정점..

[Java/Basic] Queue란 ? Stack이란? 사용법 및 기본개념

Queue와 Stack을 알아보려고 한다. Queue(큐) Queue는 FIFO First in First Out 구조로, 먼저 들어간 데이터를 먼저 꺼내는 방식이다. 데이터를 일시적으로 쌓아두기 위한 자료구조 한 쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행 다른 한 쪽 끝은 리어(rear)로 정하여 삽입 연산만 수행 그래프의 넓이 우선 탐색(BFS)에서 사용 버퍼링(담아놓고 순차적으로) Enqueue : 큐 맨 뒤에 데이터 추가 Dequeue : 큐 맨 앞쪽의 데이터 삭제 Queue Method 메서드 설 명 add( ) 객체 추가 성공 : true, 실패(저장공간이 부족 등) IllegalStateException 발생 remove( ) 객체삭제 비어있으면 NoSuchElementExcep..

[Java/Basic] Daemon Thread란? 백그라운드 실행데몬?

프로젝트를 진행하다보면 Daemon Thread를 사용해야 할 경우가 있다. 본인은 서버가 시작될떄 background로 떠있는 daemon이 필요하여, Daemon Thread를 사용하였다. 자 그럼 Daemon Thread란? 무엇인가. 자바에서 스레드는 각자의 작업이 끝날때까지 계속해서 작업을 하게 되어 있다. Daemon Thread는 main Thread가 종료될때 같이 종료가 되는 점을 이용한 자식 Thread라고 보면된다. Daemon Thread : 주 스레드의 작업을 돕는 보조적인 역할을 수행 : 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동종료 => 워드 프로세서의 자동저장, 미디어 플레이어의 동영상 및 음악재생 등 Daemon Thread 설정 방법 사용법은 간단하다. Threa..

[Java/Basic] Thread run과 start의 차이

간단한 쓰레드를 하나 예시로 남겨두려고 한다. Thread에서 run(); start(); 메서드 둘다 같은 기능을 하는것 같은데 뭐가 다를까 궁금할 수 있다. 초보들만...ㅎㅎ;; 여기서 궁금증을 해결하기위한 짧은 코드를 준비해 보았다. 먼저 start(); 로 Thread를 돌렸을때의 결과를 보고 run();으로 돌렸을때의 결과를 볼예정이다. public class ThreadRunStartTest implements Runnable{ int[] timeList = new int[10]; public ThreadRunStartTest() { for (int i = 0; i < timeList.length; i++) { timeList[i] = i; } } @Override public void run..

[Java] Builder Pattern이란? 객체 생성 방법들

Java를 사용하는데 뭔가 그냥 쓰던데로만, 겉핥기 식으로만 알고 있던것들에 대해 다시 알아보려고 한다. Builder Pattern으로 객체 생성을 알아보기 전 다른 객체 생성 방법에 대해 살짝 보고 가자!! 1. Java Beans Pattern 가장 익숙한 getter/setter를 이용하여 객체를 생성할때 필드를 주입하는 방식이다. Person person = new Person(); person.setName("BackEnd developer"); person.setAge(30); person.setAddress("BabREE"); 아래에서 보겠지만 점층적 생성자 패턴과는 다르게 1회의 생성자 호출로 객체를 완전히 생성하지 못한다는 단점이 있다. 즉, setter 메소드를 통해 값이 계속 변할 ..

반응형