전체 글

전체 글

    10703 유성

    문제 https://www.acmicpc.net/problem/10703 10703번: 유성 작고 특이한 모양의 유성 사진이 인터넷에 올라왔다. 사진에는 매우 높은 곳에서 떨어지고 있는 유성이 허공에 찍혀 있었다. 유성이 떨어지고 난 뒤의 사진도 있었지만 안타깝게도 소실돼버려 www.acmicpc.net 접근 각각의 유성 조각에 대해 떨어질 수 있는 높이의 최솟값을 구한 후, 모든 유성에 대해 구한 최솟값 만큼 아래로 떨어트린다. 아래와 같이 유성 조각 아래에 땅이 있고 또 그 아래에 유성 조각이 있는 경우 또한 처리해줘야 한다. . . . . . . . . . . . X X X X . . . . . X . . . . . . . . X # # # # # # . . X . . . . . # . . X X ..

    JPA와 ORM

    ORM 하이버네이트 ORM은 객체와 관계형 데이터베이스를 매핑하는 기술로, 객체와 테이블의 매핑관계만 설정해주면 ORM 프레임워크가 SQL을 만들어서 데이터베이스와 관련된 처리를 해준다. 매핑 방법만 알려주면 ORM 프레임워크가 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 처리해주기 때문에, 개발자는 객체지향 애플리케이션 개발에 집중할 수 있다. 자바의 ORM 기술에 대한 API 표준이 JPA이고, JPA를 구현한 ORM 프레임워크가 하이버네이트이다. MyBatis MyBatis나 스프링 JdbcTemplate은 ORM이 아니라 SQL 매퍼로, SQL 매퍼는 객체와 SQL을 매핑한다. SQL과 매핑할 객체만 지정하면 반복되는 JDBC API 사용과 응답 결과를 객체로 매핑하는 일을 SQL 매퍼가 대..

    JPQL과 페치 조인

    JPQL SQL이 데이터베이스 테이블을 대상으로 하는 데이터 중심의 쿼리라면, JPQL은 엔티티 객체를 대상으로 하는 객체지향 쿼리이다. JPQL을 사용하면 JPA는 JPQL을 분석한 다음 적절한 SQL을 만들어서 데이터베이스를 조회하고, 조회한 결과로 엔티티 객체를 생성해서 반환한다. 문법은 SQL과 비슷하지만, SQL을 추상화했기 때문에 특정 데이터베이스 SQL에 의존하지 않는다. SELECT List members = em.createQuery("SELECT m FROM Member m WHERE m.username = :username", Member.class) .setParameter("username", username) .getResultList(); JPQL 키워드는 대소문자를 구분하지 ..

    13168 내일로 여행

    문제 https://www.acmicpc.net/problem/13168 13168번: 내일로 여행 첫 번째 줄에는 한국에 있는 도시의 수 N(1 ≤ N ≤ 100)과 1인당 내일로 티켓의 가격 R(1 ≤ R ≤ 1,000,000)이 주어집니다. 두 번째 줄에는 N개의 도시의 이름이 주어집니다. 도시의 이름은 알파벳 대소 www.acmicpc.net 접근 문제를 처음 보고 내일로 티켓을 구입했을 때와 구입하지 않았을 때의 비용 정보를 따로 저장하고, 동일한 최단거리 알고리즘으로 비용을 계산한 후 비교해야 겠다고 생각했다. 경로마다 비용이 다르므로 다익스트라와 플로이드 워셜 중 하나를 이용하기로 했다. 문제에서 방문하려는 곳의 전체 경로가 정해져 있고 각 부분 경로마다 최단거리로 이동해서 목적지까지 드는 ..

    1421 나무꾼 이다솜

    문제 https://www.acmicpc.net/problem/1421 1421번: 나무꾼 이다솜 첫째 줄에 이다솜이 가지고 있는 나무의 개수 N과 나무를 자를 때 드는 비용 C와 나무 한 단위의 가격 W이 주어진다. 둘째 줄부터 총 N개의 줄에 이다솜이 가지고 잇는 나무의 길이가 한 줄에 하나 www.acmicpc.net 접근 나무의 개수가 50보다 작고 자를 수 있는 나무 길이가 10000보다 작으므로, 자를 수 있는 모든 길이에 대해 벌 수 있는 돈을 계산해서 최댓값을 구했다. 주의할 점은 가지고 있는 나무를 전부 잘라서 팔아야하는 것은 아니므로, 해당 나무를 팔았을 때 얻는 비용과 자를 때 드는 비용의 차가 양수일때만 나무를 판다. 풀이 n, c, w = map(int, input().split(..

    스택과 큐

    스택 (Stack) 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 선형 구조로, 가장 최근에 스택에 추가한 항목이 가장 먼저 나오는 후입선출 방식 재귀적으로 함수를 호출해야 하는 경우 임시 데이터를 스택에 넣어두고 재귀함수를 빠져나와 백트랙할 때는 스택에 넣어 두었던 임시 데이터를 빼내야 하는데, 스택은 이런 일련의 행위를 직관적으로 가능하게 해준다. 구현 (JAVA) import java.util.ArrayList; import java.util.EmptyStackException; public class Stack extends ArrayList { public Stack() { super(); } public Stack(int capacity) { super(capacity); } public E pus..

    배열과 연결리스트

    배열 자료구조는 크게 메모리 공간 기반의 연속 방식과 포인터 기반의 연결 방식으로 나뉘는데, 배열은 이 중에서 연속 방식의 가장 기본이 되는 자료형이다. C 언어를 기준으로 배열은 크기를 지정하고 해당 크기만큼 연속된 메모리 공간을 할당받는 작업을 수행하는 자료형을 말하며, 크기가 고정되어 있어서 한 번 생성한 배열은 크기를 변경하는 것이 불가능하다. 배열의 가장 큰 장점은 논리적 저장 순서와 물리적 저장 순서가 일치하기 때문에 원하는 요소의 인덱스 값을 알고 있으면 항상 O(1)에 해당 원소에 접근 가능하다는 점 예를 들어 int 배열에서 4번째 값에 접근하고 싶다면 (배열의 시작 주소 + (4 - 1) * 4)로 주소를 계산해 한번에 접근 가능하다. 단, 삭제 또는 삽입의 경우 원소들의 인덱스를 sh..

    트랜잭션과 ACID

    트랜잭션 트랜잭션은 데이터베이스 내에서 수행되는 작업의 최소 단위로, 데이터베이스의 무결성을 유지하면서 데이터베이스의 상태를 변화시키는 기능을 수행합니다. 필요성 1. 트랜잭션은 데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위가 됩니다. 2. 트랜잭션은 다수의 사용자가 동시에 사용할 수 있도록 제어 작업을 하는 데 중요한 단위로 사용됩니다. 따라서 데이터베이스 무결성과 일관성을 보장하려면 작업을 수행하는데 필요한 연산들을 하나의 트랜잭션으로 정확하게 정의하고 관리하는 것이 중요합니다. 일반적으로 데이터베이스를 변경하는 INSERT 문, DELETE 문, UPDATE 문의 실행을 트랜잭션으로 관리! ACID 트랜잭션이 성공적으로 처리되어 데이터베이스의 무결성과 일관성을 보장하기 위해 만족해..

    `이상현상과 정규화

    이상현상 (Anomaly) 한 릴레이션에 여러 엔티티의 속성들을 혼합하게 되면 불필요한 데이터 중복이 발생하여, 릴레이션에 대한 데이터의 삽입, 수정, 삭제 연산을 수행할 때 부작용이 발생할 수 있다. 이러한 부작용을 이상 현상이라고 하며, 함수 종속성을 이용하여 릴레이션을 연관성 있는 속성들로만 구성되도록 분해해서 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어나가는 과정을 정규화라고 한다. 이상현상 설명 삽입 이상 데이터 삽입 시 필요한 자료가 부족해 삽입되지 않거나, 불필요한 자료를 삽입해야 하는 문제 갱신 이상 중복 튜플 중 일부만 변경되어 데이터가 불일치하게 되는 모순 삭제 이상 삭제하려는 자료가 포함된 전체 튜플이 삭제되면서 원하지 않는 데이터까지 삭제되는 정보 손실 함수 종속 하나의 릴..