전체 글

이것 저것 공부해보기 좋아하는 초보 개발자로, 제가 공부하는 내용들을 제가 이해하기 쉽게 작성합니다. 질문이나 지적은 언제나 환영합니다.
힙(Heap)은 배열 또는 연결 리스트(Linked List)로 구현할 수 있다. 연결 리스트 보다는 배열로 구현하는 것이 연산시 노드를 탐색하는 과정에서 비교적 간단하여 배열로 구현했다. 연결 리스트로 구현하는 경우 인덱스가 비교적 복잡해진다.Cf. 리스트로 구현하면 `resize()` 메서드를 따로 둘 필요가 없어진다. `capacity`값도 마땅히 필요하지 않아진다.Cf. 리스트로 구현하면 인덱스는 0 이상 `this.size` 미만이며, 자식 노드는 특정 노드의 인덱스가 \(n\)이라면, \(n * 2 + 1\), \(n * 2 + 2\)가 된다.필요시 참고용도로 리스트로 힙을 구현하는 코드를 일부 작성해두신 분의 블로그 게시글 링크를 첨부한다. 전체 코드(최소힙을 구현하여 루트값이 가장 작은 형..
문제 설명네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.제한사항컴퓨터의 개수 n은 `1` 이상 `200` 이하인 자연수입니다.각 컴퓨터는 `0`부터 `n-1`인 정수로 표현합니다.`i`번 컴퓨터와 `j`번 컴퓨터가 연결되어 있으면 `com..
문제 설명n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.제한사항주어지는 숫자의 개수는 2개 이상 20개 이하입니다.각 숫자는 1 이상 50 이하인 자연수입니다.타겟 넘버는 1 이상 1000 이하인 자연수입니..
문제 설명선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다.두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다.예를 들어 A가 B에게 선물을 5번 줬고, B가 A에게 선물을 3번 줬다면 다음 달엔 A가 B에게 선물을 하나 받습니다.두 사람이 선물을 주고받은 기록이 하나도 없거나 주고받은 수가 같다면, 선물 지수가 더 큰 사람이 선물 지수가 더 작은 사람에게 선물을 하나 받습니다.선물 지수는 이번 달까지 자신이 친구들에게 준 선물의 수에서 받은 선물의 수를 뺀 값입니다.예를..
· Backend/Java
Map map = new HashMap();Set> set = map.entrySet();Iteratory> iter = set.iterator();while (iter.hasNext()) { String key = iter.getKey(); int value = iter.getValue();}
· Backend/JPA
오래전 만들어두었던 사이드 프로젝트를 리팩토링하는 작업을 진행중에 소소하게 막힌 부분들 중 간단히 작성할 수 있는 내용을 남긴다. 현재 리팩토링하는 프로젝트는 SpringBoot 3.2.3 버전에 JPA 관련해서는 `spring-boot-starter-data-jpa` 라이브러리를 사용한다. 기본적으로 모든 레파지토리는 `JpaRepository` 인터페이스를 상속하는 형태로 존재한다.문제가 된 부분은 게시글(BoardImp)을 조회할 때, 대소문자 구분없이 들어온 값이 포함되는 데이터를 조회하는 기능을 작성하는 것이었다. `LOWER()`와 `LIKE %문자열%`를 함께 쓰고 싶었다. 실행되길 원하는 쿼리문은 아래와 같았다.SELECT b.* from board_imp bWHERE (LOWER(b.ti..
`application.properties`를 사용할 때는 `ResourceBundle.getBundle("application");` 정도만 작성해도 됐지만, .yaml(.yml) 파일 사용시에는 별도의 라이브러리를 사용해주어야 한다.build.gradleimplementation 'dev.akkinoc.util:yaml-resource-bundle:2.12.3' yaml 파일을 불러오는 부분private static ResourceBundle properties = ResourceBundle.getBundle("application", YamlResourceBundle.Control.INSTANCE);Integer port = properties.get("server.post"); // 포트 정보 조회
멀리 떨어져있는 컴포넌트들 간의 통신이 필요할 때 컴포넌트 계층간에 전부 emit해주기는 많이 번거로운데, 대안으로 Vue2에서는 EventBus를 사용할 수 있었지만 Vue3에서는 다른 방안을 찾아야 한다. 1. Composition API를 사용하지 않는 경우main.js에서 app을 마운트 하기 전, app의 `config.globalProperties`에 등록하여 `this.{변수명}` 형태로 불러오는 경우가 일반적이다. MyComponent.js...기본적으로 위와 같은 구조를 가지고 있을 것이다. 이럴 경우에 methods 내부에 정의한 메서드에서 mitt를 사용해야 한다면 아래와 같이 작성할 수 있다. mitt를 글로벌 프로퍼티로 등록(main.js)import App from './App..
· Backend/JPA
앞서, JPA를 이용해 데이터를 조회해와 클라이언트로 반환하는 API를 작성할 때에는 반환 타입으로 엔티티를 그대로 사용하면 안된다. 엔티티를 바로 반환할 때의 문제점은 아래 더보기를 참고하자.더보기엔티티를 직접 반환할 때의 단점 1. 엔티티를 직접 노출하게 될 경우 엔티티가 수정되면 API 스펙이 변경되어 버린다. 예를 들어 name 필드를 username으로 변경하게 되면, API를 호출해 Response를 받는 클라이언트측 입장에서는 갑자기 name 데이터를 제대로 가져오지 못하는 경우가 발생한다.2. 엔티티는 다양한 스펙의 API에 대응할 수 있어야 한다. 하나의 API에 의존하는 엔티티는 다른 API 스펙에 유연하게 대처할 수 없다.3. 프레젠테이션 계층을 위한 로직이 엔티티에 추가된다. 엔티티..
· Backend/JPA
JPA는 DB 데이터와 Java Entity를 맵핑해주는 역할을 한다. 이 때, 영속성 컨텍스트(Persistence Context)를 중심으로 엔티티를 맵핑하고 관리한다. 따라서 영속성 컨텍스트라는 개념 없이는 JPA를 이해하기 어렵다. 영속성 컨텍스트(Persistence Context) 영속성(Persistence)의 사전적 의미는 ‘영원히 계속되는 성질이나 능력’이다. 데이터의 상태를 영구히 지속되게 하는 방법은 DB에 저장하는 방식을 떠올리기 쉽다. 하지만, 이 영속성 컨텍스트가 데이터를 관리한다는 말이 실제로 데이터를 DB에 저장하는 것은 아니다. 영속성 컨텍스트는 일종의 논리적인 영역이다. 한번 DB에서 조회해온 데이터는 영속성 컨텍스트에서 관리하며 이를 ‘영속 상태’에 있다고 한다. JPA..
devYH
모르는 것이 많습니다