반응형

전체 글 44

HackerRank - Sherlock and Anagrams

카테고리 Dictionaries and Hashmaps 문제 설명 문제의 목표는 다음과 같습니다. 주어진 문자열에서 서로 다른 문자의 조합으로 만들어진 애너그램 쌍의 개수를 찾습니다. 해결책 이 문제를 해결하기 위해 다음과 같은 단계를 따를 수 있습니다. 문자열 내 모든 부분 문자열에 대해 반복합니다. 각 부분 문자열을 정렬한 후, 정렬된 부분 문자열을 키(key)로 사용하여 해시 테이블에 저장합니다. 이때, 정렬된 부분 문자열이 이미 해시 테이블에 있는 경우, 해당 값에 1을 추가합니다. 해시 테이블의 모든 값에 대해 다음 작업을 수행합니다. 각 값이 n(n-1)/2 개의 애너그램 쌍을 나타내므로, 해당 값을 이용하여 애너그램 쌍의 개수를 계산합니다. 아래는 Python으로 작성된 구현 예제입니다. f..

HackerRank - Two Strings

카테고리 Dictionaries and Hashmaps 문제 설명 문제의 목표는 다음과 같습니다. 주어진 두 개의 문자열 중, 어느 하나에 속한 문자가 다른 문자열에도 속하는지 확인합니다. 속한 문자가 있다면 "YES"를 반환하고, 없다면 "NO"를 반환해야 합니다. 해결책 이 문제를 해결하기 위해 다음과 같은 단계를 따를 수 있습니다. 첫 번째 문자열에 포함된 모든 문자를 세트(set)로 변환하여 저장합니다. 두 번째 문자열의 각 문자에 대해 다음 작업을 수행합니다. 해당 문자가 첫 번째 문자열에 속한다면, "YES"를 반환합니다. 두 번째 문자열의 모든 문자를 확인한 후에도 "YES"를 반환하지 않았다면, "NO"를 반환합니다. 아래는 Python으로 작성된 구현 예제입니다. def twoString..

HackerRank - Hash Tables: Ransom Note

카테고리 Dictionaries and Hashmaps 문제 설명 문제의 목표는 다음과 같습니다. 주어진 두 개의 리스트를 비교하여 첫 번째 리스트의 단어로 두 번째 리스트의 단어를 구성할 수 있는지 확인합니다. 단어는 정확히 일치해야 하며, 첫 번째 리스트에서 단어를 사용하는 빈도는 두 번째 리스트에서 단어를 사용하는 빈도보다 크거나 같아야 합니다. 해결책 이 문제를 해결하기 위해 해시 테이블을 사용하여 다음과 같은 단계를 따를 수 있습니다. 빈 딕셔너리 magazine_dict를 초기화하여 랜섬 노트의 단어를 저장합니다. magazine 리스트의 모든 단어에 대해 반복하면서 다음 작업을 수행합니다. magazine_dict 딕셔너리에서 해당 단어의 개수를 1 증가시킵니다. ransom 리스트의 모든 ..

HackerRank - Frequency Queries

카테고리 Dictionaries and Hashmaps 문제 설명 문제의 목표는 다음과 같습니다. 주어진 리스트를 기반으로 작업을 수행합니다. 작업에는 요소를 추가하거나 삭제하는 것이 포함됩니다. 주어진 쿼리에 대해 요소의 빈도에 따라 결과를 반환해야 합니다. 해결책 이 문제를 해결하기 위해 다음과 같은 단계를 따를 수 있습니다. 빈 딕셔너리 num_freq를 초기화하여 리스트의 각 요소의 빈도를 저장합니다. 빈 딕셔너리 freq_count를 초기화하여 특정 빈도로 요소를 가진 개수를 저장합니다. 주어진 작업을 반복하면서 다음 작업을 수행합니다. 작업이 1일 경우: 해당 요소의 빈도를 증가시킵니다. freq_count 딕셔너리에서 해당 빈도의 개수를 1 증가시킵니다. 해당 요소의 이전 빈도가 0보다 크면..

Spring Boot 에 AWS SQS 적용하기

Amazon SQS(Simple Queue Service)란? Amazon SQS(Simple Queue Service)는 아마존 웹 서비스(Amazon Web Services, AWS)의 메시지 대기열 서비스입니다. SQS를 사용하면 분산 시스템 간에 안정적이고 확장 가능한 방식으로 메시지를 전달할 수 있습니다. SQS는 복잡한 메시지 큐 관리를 간소화하여 개발자가 응용 프로그램에 대해 신속하게 메시지 기반 아키텍처를 구현할 수 있도록 도와줍니다. SQS의 장점 신뢰성: SQS는 메시지를 전달하기 위해 내구성과 복제를 제공합니다. 메시지는 중복되거나 손실되지 않고 안전하게 보관되며, 필요한 경우 재시도 메커니즘을 통해 처리할 수 있습니다. 확장성: SQS는 많은 수의 메시지를 처리하기 위해 높은 확장성..

개발/java 2023.05.22

Spring Data JPA란?

JPA(Java Persistence API)란? JPA(Java Persistence API)는 Java에서 ORM(Object-Relational Mapping)을 구현하기 위한 표준 인터페이스입니다. JPA를 사용하면 객체와 데이터베이스 간의 매핑을 편리하게 처리할 수 있습니다. ORM은 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간격을 좁히고, 객체를 직접적으로 다룰 수 있게 해줍니다. JPA의 장점 생산성 향상: JPA는 반복적이고 번거로운 SQL 쿼리 작성을 줄여주어 개발 생산성을 향상시킵니다. 데이터베이스 관련 작업을 직접 다루지 않고 객체에 집중할 수 있습니다. 객체 지향적인 데이터베이스 접근: JPA는 객체와 데이터베이스 간의 매핑을 통해 객체 지향적인 데이터베이스 접근을 제공합니다..

개발/java 2023.05.21

Spring Data JPA 관계 매핑하기

JPA를 이용하기 위해서는 도메인 영역에 해당하는 엔티티를 정의해야 합니다. 이 엔티티는 테이블에 종속될 수도 혹은 분리해서 정의할 수도 있습니다. 엔티티 활용법에 대해서는 다음에 다시 알아보고 이번에는 관계 매핑에 대해서 알아보겠습니다. JPA의 관계 매핑은 아래와 같은 종류가 있습니다. ManyToOne OneToMany OneToOne 또한 관계 매핑된 엔티티들은 상호 관계를 모두 설정해 주어야 합니다. 예를 들어 A와 B가 ManyToOne이면 B와 A는 OneToMany 이므로 추가로 설정해 주는 방식입니다. 각 관계들의 설정 방법을 한눈에 파악할 수 있도록 예제를 만들었습니다. @Data @Entity @Builder @NoArgsConstructor @AllArgsConstructor @Ta..

개발/java 2023.05.20

QueryDsl SpringBoot JPA 레포지토리 만들기

querydsl은 JPA 쿼리를 동적 코드로써 작성할 수 있도록 도와주는 ORM 프레임워크입니다. JPA에서 기본적으로 JPQL을 사용하여 레포지토리를 정의할 수 있습니다. @Repository public class ProductRepositoryImpl implements ProductRepository { @PersistenceContext private EntityManager entityManager; @Override public List findByName(String name) { String jpql = "SELECT p FROM Product p WHERE p.name = :name"; return entityManager.createQuery(jpql, Product.class) .s..

개발/java 2023.05.19

JPA 데이터 소스 여러개 적용하기

JPA에 데이터 소스를 여러개 적용하여 DB를 2개 이상 연결할 수 있습니다. 우선 설정 클래스 정의가 필요 합니다. 메인으로 사용하는 Primay 데이터 소스를 설정 한 후 그 외 데이터 소스들을 지정해 주도록 합시다. @Primay 어노테이션으로 메인 설정이 가능합니다. @Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "firstEntityManagerFactory", transactionManagerRef = "firstTransactionManager", basePackages = { "com.hanainu.test.repository.first" } ) public class ..

개발/java 2023.05.18

Github Action으로 Spring Boot Docker 이미지 배포하기

목적 Github는 Github Action이라는 레포지토리를 연동한 CI/CD를 제공합니다. Github에서 제공하는 Runner를 이용하여 코드 배포시 도커 이미지를 만들어 서버에 배포하는작업을 자동화 하고자 합니다. 방법 Github Action으로 CI/CD를 하기 위해서는 .github/workflows 내에 yml 파일을 만들어야 합니다. 1. 조건 설정 우선 적당한 이름으로 yml 파일을 만들어 준뒤 이름과 조건을 설정합니다. 이번 예제에서는 workflow.yml로 하였습니다. name: Docker Build and Deploy on: # Workflow Manual workflow_dispatch: inputs: isRequiredRemoteDeploy: type: boolean des..

개발/java 2023.05.03
반응형