전체 글 350

[백준 1309번] 동물원 - java

문제 설명 1. 2xn크기의 우리를 갖는 동물원이 있다. 2. 사자를 넣는데, 사자의 양옆위아래에는 다른 사자가 있으면 안된다. 3. 모든 사자를 배열하는 방법을 찾는다. 사자의 수는 제한이 없고 아무도 없는 경우도 방법으로 친다. 풀이 과정 1. DP를 통해서 풀 수 있다. 2. 나는 DP의 경우 한번 n이 3이나 4가 될 때 까지는 무작정 경우의 수를 구하는 것이 쉽게 풀 수 있는 방법이라 생각한다. 그래서 그냥 방법을 구해 보았다. 우리 집에 있는 무서운 사자를 우리에 넣어보도록 하겠다. 먼저 2x1의 크기 우리에 사자가 배열되는 경우는 다음 세 가지에 해당한다. 그럼 다음으로 2x2의 우리에 사자를 넣는 경우는 어떻게 될까? 먼저 가장 왼쪽 ox의 경우(o는 사자, x는 빈칸) 이렇게 다음 우리가..

알고리즘 공부 2022.02.26

JAVA에서 ArrayList와 LinkedList에 관해, 그리고 vector

JAVA에서 ArrayList와 LinkedList에 관해, 그리고 vector ArrayList클래스 java의 Collection중 하나이다. ArrayList는 기존 자바 List와 달리 동적으로 크기가 할당된다. ArrayList는 java 메모리의 주소를 사용하여 데이터를 저장시킨다. 실질 ArrayList의 내부는 배열의 형태를 갖고 있기 때문이다. 그렇기 때문에 데이터를 검색할 때에도 바로 검색할 수 있다. 알아보기 쉽게 표현하자면 다음과 같다. 이런 식으로 각각의 data들이 하나씩 존재한다. 그럼 여기서 값을 추가하려면 어떻게 될까? 이런 식으로 새로운 값을 넣어주려면, 저 노란 색의 데이터가 들어가기 위해 뒤의 값들을 하나하나 옮겨주어야 할 것이다. 해당 위치를 찾아가서 값을 넣어준 뒤..

이론 정리/java 2022.02.26

java에서 String & StringBuffer & StringBuilder에 관해

java에서 String & StringBuffer & StringBuilder에 관해 String 먼저 java에서 String을 쪼개어 보면 이렇게 나온다. String -> final char[] 이걸 보면 자바에서 string은 final인 char의 배열로 선언되어 있다. 즉, String의 경우는 문자를 선언하게 되면 이것이 final형식으로 불변객체로 선언되게 된다. String에서 +연산자를 사용해 본 적은 있어도, -연산자롤 사용해 본 사람은 없을 것이다. 이는 String의 경우는 String pool영역에 있는 불변 객체이기 때문이다. 그렇다면 +연산자는 된다면.. String에 어떠한 값을 더하면 어떻게 될까? String str = "hell"; str += "o"; str += ..

이론 정리/java 2022.02.25

java HashMap의 Thread-Safe이슈와 HashTable, ConcurrentHashMap

HashMap의 Thread-Safe이슈와 HashTable, ConcurrentHashMap Thread-Safe란? Thread-Safe란, 멀티 스레드 프로그램에서 어떤 객체나 함수 등이 여러 스레드로부터 동시에 접근이 이루어져도 문제 없이 실행이 가능한 것이다. 동기화(Synchronize)라고도 표현하며, 여러 쓰레드에서 작업이 이루어져도 데이터의 정합성이 유지되는 것이다. 멀티 스레드가 뭔데?? 먼저 스레드란 프로세스 내에서 일을 처리하는 세부실행 단위를 뜻한다. 그렇다면 멀티 스레드란, 하나의 프로세스를 여러 개의 스레드로 나누어 수행해주는 것이다. 즉, 하나의 프로그램이 여러 작업을 동시에 수행할 수 있도록 해주는 것이며 이를 통해 수행 능력을 향상시켜 주는 개념이다. HashMap에서 T..

이론 정리/java 2022.02.25

Log4j 보안 취약점에 관하여

Log4j 보안 취약점 Log4j란? Log4j란 java/kotlin등의 코딩 도중 해당 프로그램의 로그를 기록해주는 라이브러리이다. 해당 보안 취약점이 일어난 배경 Log4j는 위에서 설명했듯, 코딩 도중에 프로그램의 로그를 기록해 준다. 그런데 이 방법은 JNDI(java naming and directory interface)를 사용하여 자바가 디렉토리를 통해 데이터를 찾을 수 있도록 하는 방식을 사용한다. 이 JNDI에서 LDAP가 문제가 되었는데, Log4j 에서 ${jndi:}를 사용하면 hello 객체를 실행하게 한다. 그리고 이를 사용하면 log4j로그가 남겨질 수 있는 모든 곳에 해당 방식을 사용하여 공격이 가능해지게 된다. 그래서 어떤 문제가 생기는가? 먼저 Log4j는 굉장히 많은 ..

[백준 2212번] 센서 - java

문제 설명 1. 센서의 개수 N, 집중국의 개수 K가 주어진다. 2. N개의 센서에 대해 집중국을 세워야 한다. 3. 문제가 이해가지 않아 한참을 해맸다... 문제에서 구해야 하는 내용에 대해 말하자면 - 직선 상에 센서들이 좌표를 갖고 주어진다. [2, 8, 10, 12, 13, 4] 요렇게 센서들이 주어지고, 만약 3개의 집중국을 세워야 한다고 해 보자 센서를 정렬하면 이렇게 될 것이고, 이 중 3개의 집중국이 커버 하도록 한다면 이런 식으로 나타낼 수 있다. -> [2, 2, 1]의 범위를 커버한다. 풀이 과정 1. 위의 내용을 기준으로 한번 생각을 해보면 센서들을 정렬한 후, 그 거리의 차를 구해주면 각각 센서들의 거리의 차를 구할 수 있다. 2. 그렇다면 집중국이 커버해야 하는 최소의 거리를 구..

알고리즘 공부 2022.02.21

GraphDB - Neo4j의 기초, 정의

해당 내용은 https://neo4j.com/graphacademy/online-training/ 사이트를 참조하여 작성하였습니다. neo4j 기초 Neo4j의 Grah구성 Nodes Vertex Object와 entities를 표현한다. Node는 반드시 Labels와 Properties를 가질 필요는 없지만, 실제로 구현해 보면 최소 하나씩의 label과 properties를 갖게 될 것이다. Labels Label은 정보를 카테고리화해준다. 예를 들어 이 곳에서 Node는 두개의 Person과 한개의 Car로 category화 되어 있다. 그리고 여기서 labels는 Node를 분류할 수 있도록 해 주었지만, 특정한 정보를 제공하지는 않고 있다. Properties Nodes의 특정 정보를 제공한다..

[백준 7662번] 이중 우선순위 큐 - java

문제 설명 1. 테스트 케이스가 T번 주어진다. 해당 테스트 케이스들에 우선 순위 큐에 시도학 연산 N번이 주어진다. 2. I는 입력, D는 삭제이고 D에서 -1이면 최소값, 1은 최대값을 삭제한다. D시도 시 큐가 비어있으면 연산하지 않는다. 3. 각 테스트 케이스마다 최대값과 최소값을 구하면 된다. 참고로 큐가 비어있으면 EMPTY를 출력한다. 풀이 과정 1. 문제가 우선순위 큐이기 때문에 가장 간단히 구현할 수 있는 우선순위 큐를 사용하면 시간 초과가 난다....??? 2. 문제의 난이도 자체는 별로 어려울 것이 없다. 분기를 여러 번 하면 된다. D일때 -> 비어있으면 continue, 아니면 1과 -1에 따라 삭제하기 I면 그냥 add하기 3. 그렇지만 우선순위 큐로는 구하려 하면 에러가 나기 ..

알고리즘 공부 2022.02.11

Mapstruct사용 이유 및 장단점. 사용 방법에 대한 사용 예제

Mapstruct 클래스 간 변환을 위해 사용하는 라이브러리 Mapstruct를 사용하면 Entity - DTO 간 매핑을 쉽게 해줄 수 있다. Mapstruct의 장점 -> ModelMapper와 비교하여 ModelMapper와 달리 Reflection API를 사용하지 않는다. 컴파일시 미리 구현체를 만들고, 이를 사용해 Mapping한다. = 처리속도가 훨씬 빠르다. Mapstruct는 10^(-5)m/s, ModelMapper는 2*10^(-3)m/s 컴파일 시 오류를 바로 확인 가능하고 디버깅이 원할하다. 사용하기 Entity정의 먼저 Entity는 내가 올릴 게시글에 관한 내용이다. 글의 ID 글의 제목 글의 내용 작성자 정보@Entity @Data public class Board { @Id..