📚 문제 링크: https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 💡 접근법 계수 정렬 알고리즘을 이용하여 구현하였다. 계수 정렬이란? 각 원소들 간의 비교 없이, 크기를 기준으로 개수를 세어 정렬하는 방법이다. 💻 코드 1) 전체 코드 import sys N = int(sys.stdin.readline()) count = [0] * 10001 for _ in range(N): count[int(sys.stdin.readline())] += 1 for i, c in..
본 게시글은 김영한님의 [자바 ORM 표준 JPA 프로그래밍 - 기본편]을 수강하며 작성한 글입니다. 1. 영속성 컨텍스트 1 1) JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) 영속성 컨텍스트 2) 앤티티 매니저 팩토리와 앤티티 매니저 앤티티 매니저 팩토리를 통해 클라이언트의 요청이 올 때마다 앤티티 매니저를 생성하고 내부적으로 DB 커넥션을 사용해서 DB에 접근한다. 3) 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어이다. 엔티티를 영구 저장하는 환경이라는 뜻이다. EntityManager.persist(entity); persist는 사실 DB에 저장하는 것이 아니라 Entity를 영속성 컨텍스트에 저장한다는 뜻이다. 영속성..
본 게시글은 김영한님의 [자바 ORM 표준 JPA 프로그래밍 - 기본편]을 수강하며 작성한 글입니다. 1. Hello JPA - 프로젝트 생성 IntelliJ 프로젝트 생성을 통해 Maven 기반 프로젝트를 생성한다. 1) Maven 설정 groubId : jpa-basic artifactId : ex1-hello-jpa version : 1.0.0 2) 라이브러리 추가 4.0.0 jpa-basic ex1-hello-jpa 1.0-SNAPSHOT 8 8 UTF-8 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 2.2.222 s H2database 버전은 PC에 다운받은 버전과 같아야 한다. 3) JPA 설정하기 - persist..
@MappedSupperclass @MappedSupperclass는 상속 관계 매핑에서 사용되는 어노테이션이다. @MappedSuperclass public abstract class Timestamped { private LocalDateTime createdDate; private LocalDateTime modifiedDate; ... } @Entity public class Member extends BaseEntity { ... } 해당 어노테이션에 선언된 클래스는 테이블과 매핑되지 않으며, 자식 클래스에게 매핑 정보만 제공한다. 이를 통해 자식 클래스는 부모 클래스의 필드를 상속받아 사용할 수 있다. → 중복 코드를 줄이고 객체 지향적인 설계를 할 수 있다. @Embedded & @Embed..
JPA에서 양방향으로 연결된 엔티티를 json으로 직렬화할 때, 즉, Entity To Json serialize할 때 (보통 controller 단) 순한 참조가 발생할 수 있다. 이를 해결하기 위해 Jackson 라이브러리의 @JsonIgnore 어노테이션이나 @JsonManagedReference & @JsonBackReference 어노테이션을 사용하여 직렬화를 제한할 수 있다. Jackson은 스프링에서 JSON을 다룰 때 사용하는 라이브러리다. spring-boot-stater-web 의존성을 주입하면 Jackson 라이브러리가 자동으로 포함된다. 1. @JsonIgnore 필드 레벨에 적용되어 직렬화 시 포함시키고 싶지 않은 필드에 선언한다. @Entity public class Team {..
본 게시글은 김영한님의 [자바 ORM 표준 JPA 프로그래밍 - 기본편]을 수강하며 작성한 글입니다. 1. SQL 중심적인 개발의 문제점 1) 무한 반복, 지루한 코드 객체에 새 필드를 추가하게 될 경우 쿼리문을 전부 수정해야 한다. 예를 들어 Member 클래스와 이와 관련된 쿼리문이 존재한다. 만약에 객체에 tel이라는 필드가 새로 추가된다면 이와 연관된 모든 쿼리문을 수정해야 한다. 2. 패러다임의 불일치 객체 vs 관계형 데이터베이스 보통 객체를 관계형 데이터 베이스에 저장한다. 이 과정에서 객체를 SQL로 변환해야 한다. 즉 SQL Mapper 역할을 개발자가 수행한다. 객체와 관계형 데이터베이스의 차이 1. 상속 SQL을 통해 테이블에 저장하는 과정 객체를 분해한다. INSERT INTO **..
📚 문제 링크: https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 💡 접근법 정렬된 리스트에서 적절한 삽입 위치를 찾아 현재값을 삽입하는 삽입 정렬 알고리즘을 이용하여 구현하였다. 삽입 정렬이란? 이미 정렬된 데이터 범위에 정렬되지 않은 데이터를 적절한 위치에 삽입시켜 정렬하는 방법이다. 💻 코드 1) 전체 코드 import sys N = int(sys.stdin.readline()) num_list = list(map(int, sys.stdin.readline().split..
📚 문제 링크: https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 💡 접근법 정렬할 리스트에서 최댓값을 찾은 뒤 현재값과 swap하는 선택 정렬 알고리즘을 이용하여 구현하였다. 선택 정렬이란? 대상 데이터에서 최대나 최소 데이터를 데이터가 나열된 순으로 찾아가며 선택하는 방법이다. 💻 코드 1) 전체 코드 import sys nums = sys.stdin.readline().strip() num_list = [] for n in nums: num_list.append(int(n)) for i, n in enumerate(num_li..