https://www.acmicpc.net/problem/21758 21758번: 꿀 따기 첫 번째 줄에 가능한 최대의 꿀의 양을 출력한다. www.acmicpc.net 풀이 사용한 알고리즘 : 누적합(Prefix Sum) 풀이전략 1. 입력한 값들의 누적합을 새로운 배열에 저장한다. 2. 문제에서 구하는 최대의 꿀양이 나올 수 있는 경우는 아래의 세가지 중 하나의 경우이다. 1) 벌 벌 꿀통 좌측의 벌은 항상 배열의 최좌측에 위치, 꿀통은 배열의 최우측에 위치한다. 중간의 벌을 이동시키며 가질 수 있는 최대 꿀양을 알아낸다. 2) 꿀통 벌 벌 꿀통은 항상 배열의 최좌측에 위치, 우측의 벌은 배열의 최우측에 위치한다. 중간의 벌을 이동시키며 가질 수 있는 최대 꿀양을 알아낸다. 3) 벌 꿀통 벌 좌측의 ..
전체 글
중요한 것은 꺾여도 그냥 하는 마음Redux란? props 없이 state를 공유할 수 있도록 도와주는 라이브러리다. 하나의 js 파일에 state를 보관하고, 모든 컴포넌트들이 state를 직접 꺼내쓸 수 있다. Redux 설치 npm install @reduxjs/toolkit react-redux 터미널에 위 명령어를 실행시킨다. 주의사항 package.json 파일에서 react와 react-dom이 18.1.0 버전 이상이어야 문제없이 설치가 가능하다. 만약 보다 낮으면, 직접 파일 수정하면 된다. Redux 파일 생성 import { configureStore } from "@reduxjs/toolkit"; export default configureStore({ reducer: { } }) state를 보관할 js 파일을 만..
https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 풀이 사용한 알고리즘 : DP, LCS(Longest Common Subsequence) 풀이전략 1. 주어진 두 문자열 길이에 맞게 이차원 배열을 선언한다. int d[][] = new d[두번째문자열.length()+1][첫번째문자열.length()+1] 2. 문자열에서 동일한 문자가 있을 경우 D[i+1][j+1]=D[i][j]+1 문자열에서 동일..
영속성 전이(CASCADE) 아래 코드들은 영속성 전이가 적용되지 않은 부모 엔티티와 자식 엔티티, 그리고 이를 활용한 비지니스 메소드들이 구현된 main 클래스이다. 부모 엔티티 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); public void addChild(Child child){ childList.add(child); child.setParent(this); } } Child 엔티티와 OneToMany를 어노테이션을 통해 연관되..
em.find()와 em.getReference() 차이는? em.find는 데이터베이스를 통해 실제 엔티티 객체를 조회한것 이고 em.getReference()는 프록시에서 값을 조회하는 것으로 프록시에 없는 값을 조회할 때까지 데이터베이스 조회를 미룬다. 프록시 특징 - 실제 클래스를 상속 받아서 만들어짐 - 실제 클래스와 겉 모양이 같음 - 사용하는 입장에서 진짜 객체인지 프록시 객체인지 구분하지 않고 사용 가능 - 프록시 객체는 현재 자신이 갖고 있지 않은 데이터에 접근해야 할 때, 처음 한 번만 초기화 한다. - 프록시 객체를 초기화 할때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님 - 초기화되면 프록시 객체를 통해서 실제 엔티티에 접근 가능 - 프록시 객체는 원본 엔티티를 상속받음, 따라서..
기존 테이블 방식의 연관 관계 //팀 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); //회원 저장 Member member = new Member(); member.setName("member1"); member.setTeamId(team.getId()); em.persist(member) //조회 Member findMember = em.find(Member.class, member.getId()); //연관관계가 없음 Team findTeam = em.find(Team.class, team.getId()); Member가 하나의 팀에 가입할 수 있을 때, Member가 특정 팀에 가입하기 위해서는 위와같이 teamID를 통해서..
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 풀이 사용한 알고리즘 : 스택 풀이전략 1. 탑의 높이 입력이 들어올 때마다 입력 값이 stack의 top에 저장된 값보다 크면, 기존 stack에서 top 원소가 더 큰게 있을 때까지 pop하고 입력 값이 stack의 top에 저장된 값보다 작으면, stack의 top 인덱스를 resut에 저장하고 기존 stack의 원소들을 유지한다. 2. stack에 현재 입력값을 push 하고 1번 과정을..
https://www.acmicpc.net/problem/2668 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 풀이 사용한 알고리즘 : DFS 풀이전략 싸이클이 발생하는 노드들을 모아 오름차순으로 출력해주면 되는 문제다. 1. DFS를 통해 각 노드마다 싸이클이 발생하는지 판단한다. - DFS 탐색 중, 탐색의 첫 번째 노드와 동일한 노드로 탐색을 하게 되면 싸이클이다. 2. 싸이클이 발생하면 탐색과정의 모든 노드 번호들을 TreeSet에 삽입한다. 3. 첫번째 노드부터 마지막 노드까지 2번 ..
@Column - name : 필드와 매핑할 테이블의 컬럼 이름 [Default : 객체의 필드 이름] - insertable, updateable : 등록, 변경 가능 여부 [Default : true] - nullable(DDL) : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. [Default : true] - unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. [Default : false] (하지만 Column에서의 unique 제약은 값에 이상한 값이 들어가기 때문에 잘 사용 안함) - columnDefinition(DDL) : 데이터베이스 컬럼 ..